1

Silverlight のドロップダウンに入力するために使用する単純なルックアップ リストがあります。この例では、米国の州を使用しています。

静的リストを返すか、 yieldキーワードを使用する方が良いかどうかを判断しようとしています。次の 2 つのコードのうち、どちらが優先され、その理由は何ですか?

バージョン 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;
    }
}
4

3 に答える 3

1

これについてはリストの方がいいと思います。このメソッドが List に対して提供する唯一の利点はyield、一度にすべての要素をメモリに保持する必要がなくなることですが、いずれにせよそうするつもりです。

于 2009-08-25T22:55:12.573 に答える
1

自問する必要がある質問は、「呼び出すコードでGetNamesリストを変更できるようにしたいですか?」ということです。

  • 答えが「はい」の場合IList、暗黙のうちに「読み書き可能」と言うを返します。
  • 答えが「いいえ」の場合はIEnumerable、暗黙のうちに「読み取り専用」と言うを返します。

とにかく、州名をハードコーディングするのではなく、リソースファイルに入れる必要があると思います(そのリストは短期的に変更される可能性は低いですが...)

これが私がすることです:

public static IEnummerable<string> GetNames()
{
    foreach(string name in _names) yield return name;
}

このようにして、リストを「外の世界」に直接公開しません

于 2009-08-25T23:32:33.730 に答える
0

個人的にはイテレータよりもリストの方が好きですが、そのようなリスト (おそらく XML、おそらくプレーン テキスト) を含むリソースをアセンブリに埋め込み、それを静的コンストラクタで読み取ることも検討します。

于 2009-08-25T22:55:14.850 に答える