Jak: odvodit vlastnost názvy a typy v anonymní typ prohlášení (Visual Basic)
Anonymní typy poskytují mechanismus pro přímo určení datových typů vlastností.Typy všechny vlastnosti jsou odvodit.V následujícím příkladu typy Name a Price jsou přímo z hodnot, které slouží k inicializaci je odvodit.
' Variable product is an instance of a simple anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
Anonymní typy lze odvodit také vlastnost názvy a typy z jiných zdrojů.Následujících částech seznam okolností, kdy je možné odvození a příklady situací, kdy není.
Úspěšné odvození
Anonymní typy lze odvodit vlastnost názvy a typy z následujících zdrojů:
Z názvů proměnných.Anonymní typ anonProduct bude mít dvě vlastnosti productName a productPrice.Ty původní proměnné budou jejich datové typy String a Double, resp..
Dim productName As String = "paperclips" Dim productPrice As Double = 1.29 Dim anonProduct = New With {Key productName, Key productPrice} ' To create uppercase variable names for the new properties, ' assign variables productName and productPrice to uppercase identifiers. Dim anonProduct1 = New With {Key .Name = productName, Key .Price = productPrice}
Vlastnost nebo pole názvy jiných objektů.Zvažte například car objekt CarClass typu, který zahrnuje Name a ID vlastnosti.Vytvoření nové instance anonymní typ car1, s Name a ID vlastnosti, které jsou inicializovány hodnotami z car objektu, můžete napsat následující:
Dim car1 = New With {Key car.Name, Key car.ID}
Předchozí prohlášení je ekvivalentní delší řádku kódu, který definuje anonymní typ car2.
Dim car2 = New With {Key .Name = car.Name, Key .ID = car.ID}
Z XML názvy členů.
Dim books = <Books> <Book Author="Jesper Aaberg"> Advanced Programming Methods </Book> </Books> Dim anon = New With {books...<Book>}
Typ výsledné anon má jednu vlastnost Book, typu IEnumerable(Z XElement).
Z funkce, která neobsahuje žádné parametry, jako například SomeFunction v následujícím příkladu.
Dim sc As New SomeClass
Dim anon1 = New With {Key sc.SomeFunction()}
Proměnná anon2 v následujícím kódu je anonymní typ, který má jednu vlastnost s názvem znaku First.Tento kód se zobrazí písmeno "E", písmeno, které funkce First.
Dim aString As String = "Example String" Dim anon2 = New With {Key aString.First()} ' The variable anon2 has one property, First. Console.WriteLine(anon2.First)
Selhání při odvozování
Odvození názvu selže v mnoha případech, včetně následujících:
Odvození odvozuje z vyvolání metody, konstruktor nebo parametrizovanou vlastnost, která vyžaduje argumenty.Předchozí prohlášení o anon1 se nezdaří, pokud someFunction má jeden nebo více argumentů.
' Not valid.
' Dim anon3 = New With {Key sc.someFunction(someArg)}
Přiřazení nového názvu vlastnosti vyřešen.
' Valid.
Dim anon4 = New With {Key .FunResult = sc.someFunction(someArg)}
Odvození odvozuje z složitý výraz.
Dim aString As String = "Act " ' Not valid. ' Dim label = New With {Key aString & "IV"}
Chybu lze vyřešit přiřazením výsledek výrazu název vlastnosti.
' Valid. Dim label1 = New With {Key .someLabel = aString & "IV"}
Odvození více vlastností vytváří dva nebo více vlastností, které mají stejný název.Odkazující zpět na prohlášení v předchozích příkladech, nelze seznamu i product.Name a car1.Name jako vlastnosti anonymní stejného typu.Důvodem je, že by inferred identifikátor pro každý z těchto Name.
' Not valid.
' Dim anon5 = New With {Key product.Name, Key car1.Name}
Problém lze vyřešit přiřazení hodnoty k vlastnosti odlišné názvy.
' Valid. Dim anon6 = New With {Key .ProductName = product.Name, Key .CarName = car1.Name}
Všimněte si, že se změní v případě, že (změny mezi malými a velkými písmeny) provést dva názvy odlišné.
Dim price = 0
' Not valid, because Price and price are the same name.
' Dim anon7 = New With {Key product.Price, Key price}
Počáteční typ a hodnotu jednu vlastnost závisí na další vlastnost, která ještě nejsou stanoveny.Například .IDName = .LastName není platný v deklaraci anonymní typ Pokud .LastName je již inicializován.
' Not valid.
' Dim anon8 = New With {Key .IDName = .LastName, Key .LastName = "Jones"}
V tomto příkladu můžete problém vyřešit přehozením pořadí, ve kterém jsou vlastnosti deklarované.
' Valid. Dim anon9 = New With {Key .LastName = "Jones", Key .IDName = .LastName}
Název vlastnosti anonymní typ je stejný jako název člena Object.Například následující prohlášení se nezdaří, protože Equals je metoda Object.
' Not valid.
' Dim relationsLabels1 = New With {Key .Equals = "equals", Key .Greater = _
' "greater than", Key .Less = "less than"}
Problém lze vyřešit změnou názvu vlastnosti:
' Valid Dim relationsLabels2 = New With {Key .EqualString = "equals", Key .GreaterString = "greater than", Key .LessString = "less than"}
Viz také
Referenční dokumentace
Koncepty
Inicializátory objektů: Pojmenované a anonymní typy (Visual Basic)