2013-02-01 8 views
7

この質問はおそらく何百回も返されましたが、ここには入ります。'string'型を暗黙的に 'System.Collections.Generic.List <string>'に変換することはできません

私はこのコードのchunckを持っている:

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); 
} 

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

しかし、表示されているエラーのためにコードがコンパイルされず、なぜ正確に理解できません。誰でも助けてくれますか?

+1

? (そして、あなた自身のコードを将来のクエストインのためにフォーマットする時間を取ってください。) –

+3

ToString()の代わりにToList()を使用してください。 –

+0

_listString_は決して使用されません。あなたは_listObject_で重複する文字列を削除しようとしていますか? –

答えて

11

これは問題行です:

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

ToStringは、文字列を返し、あなたはList<string>変数に代入しようとしています。

あなたはこのような何かをする必要があります。

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

この文は、あなたのlistObject可算あなたの希望は、その後、文字列に値を変換し、最終的にList<string>に列挙を変換することを順番に注文します。

+0

それは完全に動作します。ありがとうございました! – hsim

2

ToStringの代わりにToListとしたいと思います。あなたがやろうとしているすべての重複を削除された場合も

、あなたは単にLINQを使用して行うことができますこの:

このコードで
List<string> listString = listObject.OrderBy(x => x.m_Type). 
    Select(x => x.ToString()).Distinct().ToList(); 
+0

ああ!それも試してみる。 – hsim

+0

listObjectはstringではなくObjectInfoのリストなので、listObject.OrderBy(x => x.m_Type).Select(l => l.ToString())。Distinct()。ToList() – AndyClaw

+0

@AndyClawありがとうAndy。あなたがコメントしたのと同じように私は自分の答えを編集していたと思う。 –

5

ルック:

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

右側式はOrderByの結果でToString()を呼び出していますが、これは有用ではないため、stringとなります。

これで、そのstring式をタイプList<string>の新しい変数に割り当てようとしています。それはうまくいかないでしょう。

私はは容疑者あなただけの代わりにToStringToListをしたい:

List<string> listString = listObject.OrderBy(x => x.m_Type).ToList(); 
+0

私はそれが嫌いではありません。むしろ動作しません。私は最初にデータを受け取るリストが文字列リストだったからだと思ったが、それは...だめだ。 – hsim

+0

@エルベシマール:どういう意味ですか?これを試したときに何が失敗したのですか? 'm_Type'フィールドの型は何ですか? (もっと具体的にしてください) –

2

あなたにすべてのコードを簡素化することができます。

List<string> listString = listObject.OrderBy(x => x.m_Type) 
            .Select(x => x.ToString()) 
            .Distinct() // Remove duplicated entries 
            .ToList(); 
ViewBag.property1 = new SelectList(listString); 
+0

私のコードは今このようになります:)ありがとう! – hsim

+0

+1あなたはポイントではなく、OPに値する。 –

1

行われる訂正のビットは、まだありました。見つかった正しい値がタイプの文字列ではなくオブジェクトの型である

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); 
     } 

その方法:ここでは完全なコードです。

ありがとうございました。

1

stringのリストにintの変換リストに:

ラインが失敗している
List<string> listString = listObject.OrderBy(x => x.m_Type). 
Select(x =>x.ToString()).ToList(); 
関連する問題