Sdílet prostřednictvím


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

Klíč (Visual Basic)

Koncepty

Inicializátory objektů: Pojmenované a anonymní typy (Visual Basic)

Místní odvození typu (Visual Basic)

Anonymní typy (Visual Basic)