Sagen, ich habe den folgenden Typ:Wie deklariere ich ein Array mit einem generischen Typ?
public class Field<T>
{
public string Name { get; set; }
public T Value { get; set; }
}
Wie kann ich eine Variable deklarieren, die ein Array solcher Felder enthalten? Ich habe versucht, die folgenden:
var customFields = new Field[]
{
new Field<string> { Name = "nickname", Value = "Bob" },
new Field<int> { Name = "age", Value = 42 },
new Field<DateTime> { Name = "customer_since", Value = new DateTime(2000, 12, 1) }
};
aber ich erhalte die folgende Compiler-Ausnahme:
Mit dem generischen Typ 'Field' erfordert 1 Typ Argumente
Ich habe auch versucht var customFields = new Field<object>[]
aber Ich erhalte folgende Fehler:
Kann den Typ 'Field' nicht implizit in 'F konvertieren ield‘
kann nicht implizit konvertiert Typ‚Field‘auf‚Field‘
nicht implizit Kann Typ konvertieren‚Field‘auf‚Field‘
Jeder generische Typ ist ein * anderer Typ *. Daher versuchen Sie, ein Array von Instanzen unterschiedlicher Typen zu erstellen. Das ist nicht möglich. Es ist so, als würde man versuchen, ein Array zu erstellen, das 'string'- und' int'-Werte speichert. Sie können jedoch [Kovarianz] (https://msdn.microsoft.com/en-us/library/dd799517 (v = vs.110) .aspx) betrachten. –