Domanda

var x = new { a = "foobar", b = 42 };
List<x.GetType()> y;

C'è un modo diverso di fare quello che voglio fare qui?

Se non c'è, io non vedo tutto ciò che molto senso tipi impliciti ...

È stato utile?

Soluzione

x.GetType() è una chiamata di metodo, valutata al momento dell'esecuzione. Non può pertanto essere utilizzato per un tempo di compilazione concetto come il tipo di una variabile. Sono d'accordo che a volte sarebbe molto utile per essere in grado di fare qualcosa di simile (specificando il tipo in fase di compilazione di una variabile come un argomento di tipo altrove), ma al momento non è possibile. Non posso dire che mi manca regolarmente, però.

Tuttavia, è possono fare:

var x = new { a = "foobar", b = 42 };
var y = new[] { x };
var z = y.ToList();

Si potrebbe anche scrivere un metodo di estensione semplice per creare un elenco generico:

public static List<T> InList<T>(this T item)
{
    return new List<T> { item };
}

(Scegliete un nome diverso se si desidera:)

Quindi:

var x = new { a = "foobar", b = 42 };
var y = x.InList();

Come Marc mostra, non devono essere per un metodo di estensione affatto. L'unica cosa importante è che il compilatore può utilizzare l'inferenza dei tipi di elaborare il parametro di tipo per il metodo in modo che non c'è bisogno di cercare di assegnare un nome al tipo anonimo.

variabili locali implicitamente tipizzate sono utili per una serie di motivi, ma sono particolarmente utile in LINQ in modo da poter creare una proiezione ad-hoc senza creare un intero nuovo tipo in modo esplicito.

Altri suggerimenti

Ci sono modi di fare questo con un metodo generico:

public static List<T> CreateList<T>(T example) {
    return new List<T>();
}
...
var list = CreateList(x);

o creando un elenco con i dati e poi svuotarlo ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top