çåã¡ã¢: IEnumerable<>ã®æ´¾çã¯ã©ã¹ã§å®è£ ãã¹ãGetEnumerator
次ã®æ¬ãèªãã§ããããC#ã®è¨èªæ©è½ã解説ããç« ã§ãåãããªãç®æãããã¾ããã
2ã¤ã®Modelã¯ã©ã¹ãããã¾ãã1ã¤ã¯ãProductããã1ã¤ã¯ãList
ShoppingCartã¯ãIEnumerable<>ãæ¡å¼µãã¦ãã¾ãã
Product.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace LanguageFeatures.Models { public class Product { public int ProductID { get; set; } public int Name { get; set; } public string Description { get; set; } public decimal Price { get; set; } public string Category { get; set; } } }
ShoppingCart.cs
using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Web; namespace LanguageFeatures.Models { public class ShoppingCart: IEnumerable<Product> { public List<Product> Products { get; set; } // 1ã¤ç®ã®GetEnumerator public IEnumerator<Product> GetEnumerator() { return Products.GetEnumerator(); } // 2ã¤ç®GetEnumerator IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } }
ShoppingCartã¯ã©ã¹ã«ãGetEnumeratorã¡ã½ããã2ã¤åºã¦ãã¾ãã
1ã¤ç®ã®GetEnumeratorãIEnumerator
ãªã2ã¤ã®å®è£ ãå¿ è¦ãªã®ããåããã¾ããã
æ¤ç´¢ããã解説è¨äºãè¦ã¤ãã¾ããã
IEnumerable
ãç¶æ¿ããã«ã¯ GetEnumerator()ã¡ã½ãããå®è£ ãã¾ãã IEnumerator
GetEnumerator(); å ãã¦ã IEnumerator ã® GetEnumerator() ã¡ã½ãããå®è£ ããå¿ è¦ãããã¾ãã
IEnumerator GetEnumerator()
ãã㯠IEnumerator
ãåã« IEnumerator ã®ã¸ã§ããªãã¯çã¨ããã ãã§ãªãã IEnumerator ãç¶æ¿ãã¦ããã¤ã³ã¿ã¼ãã§ã¼ã¹ã ããã§ãã IEnumerator
ãç¶æ¿ãã㨠IEnumerator ãç¶æ¿ãããã¨ã«ãªãã¾ãã å®éã«ã¯IEnumerator
C# インターフェース - IEnumerable(T) | プログラマーズ雑記帳ã® GetEnumerator() ããã¾ã使ããã¾ããã ãããã両æ¹ã® GetEnumerator() ã¡ã½ãããå®è£ ããªãã¨ã³ã³ãã¤ã«ã«å¤±æãã¦ãã¾ãã¾ãã
GetEnumeratorã2ã¤å¿
è¦ãªçç±ããåããããã§åããã¾ããåãã£ãã®ã§ã追è¨ãã¾ããsmogamiãããtsurumaruããã«Twitterã§æãã¦ããã ãã¾ããããããã¨ããããã¾ãã
- 2ã¤ç®ã®GetEnumeratorãå é¨ã§å¼ã³åºãã¦ããGetEnumeratorãã1ã¤ç®ã®GetEnumeratorã§ã¯ãªããã¨æ¨æ¸¬ããããããã¯æ£ããã â æ£ãã
- ããæ£ãããã°ããGetEnumerator()ãã¨æ¸ãã ãã§ã1ã¤ç®ãã¤ã¾ãIEnumerator
ãè¿ãæ¹ã®ã¡ã½ãããå¼ã°ããã®ã¯ãªãã ããæ£ãããªããã°ã2ã¤ç®ã®GetEnumeratorãå é¨ã§å¼ã³åºãã¦ããGetEnumeratorã¯ä½ããã¦ããã®ã
IEnumerator
ãã®ããã«ã¤ã³ã¿ãã§ã¼ã¹åãã¤ãã¦å®è£ ããã¡ã½ããã¯ãã¤ã³ã¿ãã§ã¼ã¹ãä»ãã¦ããã¢ã¯ã»ã¹ã§ããªããªãã¾ãããããã£ã¦ã2ã¤ç®ã®ã¡ã½ãããå¼ã³åºãã¦ããã®ã¯ãã¤ã³ã¿ãã§ã¼ã¹åãç¹å®ããªãå®è£ ãããªãã¡1ã¤ç®ã®GetEnumerator()ã§ãã
smogamiããã«æãã¦ããã£ããã¼ã¸ãã¨ã¦ãåãããããã§ãã
- æ示çãªã¤ã³ã¿ã¼ãã§ã¤ã¹ã®å®è£ (C# ããã°ã©ãã³ã° ã¬ã¤ã) http://msdn.microsoft.com/ja-jp/library/ms173157(v=vs.80).aspx
ï¼è¿½è¨ããã¾ã§ï¼
ã¡ãªã¿ã«ãå©ç¨å´ã®ã³ã¼ãã¯ãIEnumerableãforeachã§åãExtension Methodã§ãã
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace LanguageFeatures.Models { public static class MyExtensionMethods { public static decimal TotalPrice(this IEnumerable<Product> productEnum) { decimal total = 0; foreach (Product prod in productEnum) { total += prod.Price; } return total; } } }