10

この質問はおそらく何百回も答えられていますが、ここに行きます。

私はこのコードの塊を持っています:

private void PopulateStringDropdownList(List<ObjectInfo> listObject,
                                        object selectedType = null)
{
    List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();
    for (int i = 0; i < listString .Count; i++)
    {
        for (int j = i + 1; j < listString .Count; j++)
        { 
            if (String.Equals(listString [i], listString [j]))
            {
                listString.RemoveAt(j);
            }
        }
    }
    ViewBag.property1 = new SelectList(listString );
}

したがって、基本的には、パラメータで渡したリストに含まれる各オブジェクトのプロパティからの文字列をドロップダウンリストに入力しようとしています。

しかし、そこに表示されているエラーのためにコードはコンパイルされません。その理由はまだ正確にはわかりません。誰か助けてくれませんか?

4

6 に答える 6

15

これは問題のある行です:

List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();

ToStringList<string>文字列を返し、変数に割り当てようとしています。

あなたはこのようなことをする必要があります:

List<string> listString = listObject.OrderBy(x => x.m_Type)
                                    .Select(x => x.ToString())
                                    .ToList();

このステートメントは、listObject列挙型を希望の順序に並べ替え、次に値を文字列に変換し、最後に列挙型をに変換しList<string>ます。

于 2013-02-01T21:01:59.780 に答える
5

このコードを見てください:

List<string> listString = listObject.OrderBy(x => x.m_Type).ToString();

右側の式は、-ToString()の結果を呼び出していOrderByますが、それ自体は役に立たず、結果は。になりstringます。

string次に、その式をタイプの新しい変数に割り当てようとしていますList<string>。それはうまくいきません。

ToListあなたが代わりに欲しいだけだと思いますToString

List<string> listString = listObject.OrderBy(x => x.m_Type).ToList();
于 2013-02-01T21:02:02.727 に答える
2

ToListの代わりに欲しいと思いますToString

また、重複を削除するだけの場合は、LINQを使用して次のようにすることができます。

List<string> listString = listObject.OrderBy(x => x.m_Type).
    Select(x => x.ToString()).Distinct().ToList();
于 2013-02-01T21:02:01.790 に答える
2

すべてのコードを次のように簡略化できます。

List<string> listString = listObject.OrderBy(x => x.m_Type)
                                    .Select(x => x.ToString())
                                    .Distinct()  // Remove duplicated entries
                                    .ToList();
ViewBag.property1 = new SelectList(listString);
于 2013-02-01T21:12:39.030 に答える
2

まだ少し修正が必要でした。完全なコードは次のとおりです。

private void PopulateStringDropdownList(List<ObjectInfo> listObjects, object selectedType = null)

        {
            List<string> listString = listObjects.OrderBy(x => x.m_Type)
                                             .Select(x => x.m_Type.ToString())
                                             //.Distinct()
                                             .ToList();
            ViewBag.cardType = new SelectList(listString );
        }

そうすれば、見つかった正しい値は、オブジェクトのタイプではなく、タイプの文字列です。

皆さんの助けに感謝します!

于 2013-02-01T21:22:06.443 に答える
2

intのリストを次のリストに変換しますstring

List<string> listString =  listObject.OrderBy(x => x.m_Type).
Select(x =>x.ToString()).ToList();
于 2017-05-10T06:32:40.573 に答える