0

method2さまざまなタイプの可変数のリストが与えられた場合、それらをタイプ の単一のコレクションに連結するフランケンシュタインに値するアプローチ ( ) を思いつきましたobject

私は少し太っていますか、それとも以下のコードが多かれ少なかれ必要ですか?

object[] foo()
{
    var a = new List<string>() { "hello" };//type 1
    var b = new List<Uri>() { new Uri("http://test") };//type 2

    //combined
    IEnumerable<object> method2 = new object[]{a, b}.Select(x=>((IEnumerable)x).Cast<object>()).SelectMany(y=>y);

    var returnable = method2.ToArray();
    bool success = (returnable[0] is string);
    return returnable.ToArray();
}

List<string>基本的に異なる型であるため、 aを aにキャストできないことは承知していますList<object>が、上記は少し極端だと思いました。

4

5 に答える 5

2
object[] result = a.Cast<object>().Concat(b.Cast<object>()).ToArray();
于 2013-09-16T12:19:57.643 に答える
2

List<T>でありIEnumerable<T>,、これらは共変です。したがって、次を使用できます。

var method2 = ((IEnumerable<object>)a).Concat((IEnumerable<object>)b);
于 2013-09-16T12:20:09.693 に答える
2

List<string>への変換List<object>は非常に簡単です

var yourList = new List<string>() {"hello");
List<object> a = yourList.ToList<object>();

すべてのリストでこれを行い、次を使用してそれらを接続できますAddRange

すべてのオブジェクトはから継承するobjectため、このアプローチは有効ですMSDN here

于 2013-09-16T12:15:53.707 に答える
0
var n = a.Cast<object>().Concat(b.Cast<object>()).ToArray();
于 2013-09-16T12:17:16.013 に答える