.NET 2.0でList <int>をList <string>にキャストする


96

あなたはキャストすることができますList<int>List<string>何とか?

ループして.ToString()を実行できることはわかっていますが、キャストは素晴らしいです。

私はC#2.0を使用しています(LINQはありません)。

回答:


151

.NET 2.0には、ConvertAllコンバーター関数を渡すことができるメソッドがあります。

List<int>    l1 = new List<int>(new int[] { 1, 2, 3 } );
List<string> l2 = l1.ConvertAll<string>(delegate(int i) { return i.ToString(); });

116

2010年に更新

List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());

6
ありがとう!これは私に時間のトン保存
スティーブ・フレンチ

2
いいえ、ラムダはC#3.0で導入されたため、2.0では機能しません。
ルーク

少なくとも.NET 3.0がインストールされている限り、VS2008および.NET 2.0で動作することがわかりました。stackoverflow.com/questions/3341846/…を
igelineau 2014年

1
.NETバージョンとC#バージョンを区別する必要があります。矢印x => x.ToString()delegate(int x) { return x.ToString(); }この場合と同じ種類のILにコンパイルされるので、重要なことは、何であるかを認識するC#コンパイラ(C#バージョン)を用意すること=>です。フレームワークとランタイム(.NETバージョン)には特別な機能は必要ないため、ここでは.NET 2.0で問題ありません。
Jeppe Stig Nielsen

あなたが捨てることができることが判明し<string>、それはまだ機能します。それだけで作るl1.ConvertAll(x => x.ToString());
ʙᴀᴋᴇʀᴍᴀᴛᴛ

8

C#2.0はできますList<T>.Convertか?もしそうなら、私はあなたの最良の推測はそれをデリゲートで使うことだと思います:

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Convert(delegate (int i) { return i.ToString(); });

それらの線に沿った何か。


おそらく正しいコードであるGlennの答えを賛成してください;-)


6

以下を使用できます。

List<int> items = new List<int>(new int[] { 1,2,3 } );
List<string> s = (from i in items select i.ToString()).ToList();

5

intからstringへの明示的または暗黙的なキャストが存在しないため、直接キャストすることはできません。次のような.ToString()を含むメソッドである必要があります。

foreach (int i in intList) stringList.Add(i.ToString());

編集 -または他の人がかなり見事に指摘しているように、intList.ConvertAll(delegate(int i){return i.ToString();});を使用しますが、明らかに.ToString()を使用する必要があり、変換ではなくキャスト。


3
ジェネリック型間のキャストの存在は、プロジェクション間のキャスト機能とは関係ありません。場合でもIE、int明示的または暗黙的に変換したstringものを意味するものではありません、List<int>との暗黙的または明示的な変換を持っていますList<string>
Adam Robinson

1

新しいリストを作成する必要があります。基礎となるビット表現List<int>List<string>完全に互換性がありません- 64ビットプラットフォーム上で、例えば、個々のメンバーも同じ大きさではありません。

aをa List<string>として扱うことは理論的には可能List<object>です。これにより、共分散と反変のエキサイティングな世界に入ることができ、現在C#またはVB.NETではサポートされていません。


@Curt:>理論的には、List <string>をList <object>として扱うことが可能です->これにより、共分散と反変のエキサイティングな世界に移動できます>現在、C#またはVBではサポートされていません。 NET C#と.NETは実際には共分散をサポートしています。ジェネリックではありません。
クリスチャンハゲリド2008

1

result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()

パラメータのresultとlistOfIntをパラメータに置き換えます


私にとっては正しく動作しましたresult = listOfInt.Select(i => i.ToString())。ToList();
Sharunas Bielskis
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.