2

私は次の機能を持っていますが、それは非常に長く、汚れていて、最適化したいです:

        //some code
        if (use_option1 == true)
        {
            foreach (ListViewItem item in listView1)
            {
                //1. get subitems into a List<string>
                //
                //2. process the result using many lines of code
            }
        }
        else if (use_option2 = true)
        {
            //1. get a string from another List<string>
            //
            //2. process the result using many lines of code
        }
        else
        {
            //1. get a string from another List<string> (2)
            //
            //2. process the result using many lines of code
        }

これは非常にうまく機能していますが、非常に汚れています。次のようなものを使用したいです。

        //some code
        if (use_option1 == true)
        {
            List<string> result = get_item();//get subitems into a List<string>
        }
        else if (use_option2 = true)
        {
            //get a string from another List<string>
        }
        else
        {
            //get a string from another List<string> (2)
        }


            //process the result using many lines of code


        private void get_item()
        {
            //foreach bla bla
        }

リスト内の次のアイテムを毎回取得するように get_item 関数を作成するにはどうすればよいですか?

GetEnumerator について何か読んだことがありますが、これが問題の解決策なのか、それとも使用方法なのかわかりません。

4

2 に答える 2

1

yield キーワードを見てみましょう。これは効率的で、IEnumerable を返します。次の例を検討してください。

        List<string> list = new List<string> { "A112", "A222", "B3243" };

        foreach(string s in GetItems(list))
        {
            Debug.WriteLine(s);
        }

GetItems メソッドが次のように定義されている場合:

public System.Collections.IEnumerable GetItems(List<string> lst)
{
    foreach (string s in lst)
    {
        //Some condition here to filter the list
        if (s.StartsWith("A"))
        {
            yield return s;
        }
    }
}

あなたの場合、次のようなものがあります:

public System.Collections.IEnumerable GetItems()
{
    for (ListViewItem in ListView)
    {
        //Get string from ListViewItem and specify a filtering condition
        string str = //Get string from ListViewItem
        //Filter condition . e.g. if(str = x)
        yield return str;
    }
}

さらに進んで LINQ を使用する場合は、1 行になります。

public System.Collections.IEnumerable GetItems(List<string> lst)
{
    return lst.Where(T => T.StartsWith("A"));
}

これが役に立つことを願っています。

于 2012-05-04T18:50:05.857 に答える
0

これについては、公式ドキュメントで読むことができます-例を使用して:MSDNリファレンス

于 2012-05-02T14:19:49.863 に答える