在c#中生成返回查找列表或预加载静态列表会更好吗?
我有一个简单的查找列表,我将用它来填充Silverlight中的下拉列表。 在这个例子中,我使用美国国家。
我试图找出它是否更好地返回静态列表或使用yield关键字。 以下两段代码中,哪些是首选的,为什么?
版本1:使用收益率回报
public class States
{
public static IEnumerable<string> GetNames()
{
yield return "Alabama";
yield return "Alaska";
yield return "Arizona";
yield return "Arkansas";
yield return "California";
yield return "Others ...";
}
}
版本2:返回列表
public class States
{
private static readonly IList<string> _names;
static States()
{
_names = new List<string>() {"Alabama",
"Alaska",
"Arizona",
"Arkansas",
"California",
"Others ..." };
}
public static IList<string> GetNames()
{
return _names;
}
}
你需要问自己的问题是:“我希望调用GetNames
的代码能够修改列表吗?”
IList
,隐含地说:“读写” IEnumerable
,隐含地说:“只读” 无论如何,我认为你应该把州名放在一个资源文件中,而不是硬编码它们(即使这个列表在短期内不太可能改变......)
这是我会做的:
public static IEnummerable<string> GetNames()
{
foreach(string name in _names) yield return name;
}
这样你就不会直接将该列表暴露给“外部世界”
我认为我更喜欢这个列表。 yield
方法在List中提供的唯一优点是避免需要一次将所有元素保存在内存中,但是无论如何你都要这样做。
这可能有助于解释为什么你应该使用V1 http://startbigthinksmall.wordpress.com/2008/06/09/behind-the-scenes-of-the-c-yield-keyword/
链接地址: http://www.djcxy.com/p/53757.html上一篇: Is it better to yield return lookup lists or preload a static list in c#?