LoginSignup
0
0

More than 1 year has passed since last update.

List と LINQ と params object[]

Last updated at Posted at 2023-02-14

params object[] でなんでも受けようとすると、配列以外の配列っぽいものはソレそのものが単一の object として入ってきます。

void PrintToConsole(params object[] values) => string.Join(", ", values);


var array = new string[] { "A", "B", "C" };
var list = new List<string>(array);
var linq = array.Where(x => true);
var linq2 = array.FirstOrDefault();

PrintToConsole(array);  // A, B, C
PrintToConsole(list);   // System.Collections.Generic.List`1[System.String]
PrintToConsole(linq);   // System.Linq.Enumerable+WhereArrayIterator`1[System.String]
PrintToConsole(linq2);  // A

ココから ToArray() が必要な LINQ と List だけを選ぶには 👇

values[0] is IEnumerable IEnumerator ICollection
string × × 文字列が IEnumerable
List<string> × お前 IEnumerator 無いんか
LINQ (Where) × モノによって型が違う問題

IEnumeratorICollection のどちらか。
ただし、これらを実装した List/Linq 以外の何かが来たら終わる。IToArrayable の登場が待たれる。

--

見直すと IEnumerablestring では無いものは foreach なり何なりが一番良さそう。

--

そもそも params object[] なんて使わない方が良いんでしょうね。でも雑で良い部分で使うには便利なんだよなー。

以上です。お疲れ様でした。

0
0
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0