LINQを使用して1行のコードでstring[]をint[]に変換する 質問する

LINQを使用して1行のコードでstring[]をint[]に変換する 質問する

文字列形式の整数の配列があります:

var arr = new string[] { "1", "2", "3", "4" };

これをさらに推し進めるには、「実数」の整数の配列が必要です。

void Foo(int[] arr) { .. }

int にキャストしようとしましたが、もちろん失敗しました。

Foo(arr.Cast<int>.ToArray());

次にできること:

var list = new List<int>(arr.Length);
arr.ForEach(i => list.Add(Int32.Parse(i))); // maybe Convert.ToInt32() is better?
Foo(list.ToArray());

または

var list = new List<int>(arr.Length);
arr.ForEach(i =>
{
   int j;
   if (Int32.TryParse(i, out j)) // TryParse is faster, yeah
   {
      list.Add(j);
   }
 }
 Foo(list.ToArray());

しかし、どちらも見た目が醜いです。

タスクを完了する他の方法はありますか?

ベストアンサー1

配列が与えられた場合は、Array.ConvertAll方法:

int[] myInts = Array.ConvertAll(arr, s => int.Parse(s));

ラムダを省略して、以下に示すような短いバージョンを生成できることを指摘してくれた Marc Gravell に感謝します。

int[] myInts = Array.ConvertAll(arr, int.Parse);

LINQ ソリューションも同様ですが、ToArray配列を取得するために追加の呼び出しが必要になります。

int[] myInts = arr.Select(int.Parse).ToArray();

おすすめ記事