在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#?

    下一篇: Nested yield return with IEnumerable