回答:
2010年に更新
List<int> l1 = new List<int>(new int[] { 1,2,3 } );
List<string> l2 = l1.ConvertAll<string>(x => x.ToString());
x => x.ToString()
はdelegate(int x) { return x.ToString(); }
この場合と同じ種類のILにコンパイルされるので、重要なことは、何であるかを認識するC#コンパイラ(C#バージョン)を用意すること=>
です。フレームワークとランタイム(.NETバージョン)には特別な機能は必要ないため、ここでは.NET 2.0で問題ありません。
<string>
、それはまだ機能します。それだけで作るl1.ConvertAll(x => x.ToString());
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の答えを賛成してください;-)
intからstringへの明示的または暗黙的なキャストが存在しないため、直接キャストすることはできません。次のような.ToString()を含むメソッドである必要があります。
foreach (int i in intList) stringList.Add(i.ToString());
編集 -または他の人がかなり見事に指摘しているように、intList.ConvertAll(delegate(int i){return i.ToString();});を使用しますが、明らかに.ToString()を使用する必要があり、変換ではなくキャスト。
int
明示的または暗黙的に変換したstring
ものを意味するものではありません、List<int>
との暗黙的または明示的な変換を持っていますList<string>
。
新しいリストを作成する必要があります。基礎となるビット表現List<int>
とList<string>
完全に互換性がありません- 64ビットプラットフォーム上で、例えば、個々のメンバーも同じ大きさではありません。
aをa List<string>
として扱うことは理論的には可能List<object>
です。これにより、共分散と反変のエキサイティングな世界に入ることができ、現在C#またはVB.NETではサポートされていません。
result = listOfInt.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToList()
パラメータのresultとlistOfIntをパラメータに置き換えます