Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A névtelen típusok nem biztosítják a tulajdonságok adattípusainak közvetlen megadására szolgáló mechanizmust. A rendszer az összes tulajdonság típusára következtet. Az alábbi példában a Name és Price típusait közvetlenül az inicializálásukhoz használt értékek alapján következtetjük.
' Variable product is an instance of a simple anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
A névtelen típusok más forrásokból is következtethetnek a tulajdonságnevekre és -típusokra. Az alábbi szakaszok felsorolják azokat a körülményeket, amelyekből következtetés lehetséges, és példákat azokra a helyzetekre, amikor nem.
Sikeres következtetés
A névtelen típusok a következő forrásokból következtethetnek a tulajdonságnevekre és -típusokra:
Változónevekből. A névtelen típus
anonProductkét tulajdonsággal fog rendelkezni,productNameésproductPrice. Az adattípusuk az eredeti változóké lesz,StringilletveDoubleazoké.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}Más objektumok tulajdonság- vagy mezőnevéből. Vegyük például egy
carobjektumot, amelyCarClasstípusú, és tartalmazNameésIDtulajdonságokat. Új névtelen típusú példány létrehozásához, amelynekcar1ésNametulajdonságai aIDobjektum értékeivel vannak inicializálva, a következőt írhatja:Dim car1 = New With {Key car.Name, Key car.ID}Az előző deklaráció egyenértékű a névtelen típust
car2meghatározó hosszabb kódsorsal.Dim car2 = New With {Key .Name = car.Name, Key .ID = car.ID}XML-tagnevekből.
Dim books = <Books> <Book Author="Jesper Aaberg"> Advanced Programming Methods </Book> </Books> Dim anon = New With {books...<Book>}Az eredményül kapott típusnak egy tulajdonsága lenne,
anon, amiBookXElement típusú.Olyan függvényből, amely nem rendelkezik paraméterekkel, például
SomeFunctionaz alábbi példában.Dim sc As New SomeClass Dim anon1 = New With {Key sc.SomeFunction()}A következő kódban szereplő változó
anon2egy névtelen típus, amelynek egy tulajdonsága van, egy karakter neveFirst. Ez a kód egy "E" betűt jelenít meg, a függvény Firstáltal visszaadott betűt.Dim aString As String = "Example String" Dim anon2 = New With {Key aString.First()} ' The variable anon2 has one property, First. Console.WriteLine(anon2.First)
Következtetési hibák
A névkövetkeztetés számos esetben sikertelen lesz, beleértve a következőket:
A következtetés egy metódus, konstruktor vagy paraméteres tulajdonság argumentumokat igénylő meghívásából származik. Az előző deklaráció
anon1meghiúsul, hasomeFunctionegy vagy több argumentuma van.' Not valid. ' Dim anon3 = New With {Key sc.someFunction(someArg)}Az új tulajdonságnévhez való hozzárendelés megoldja a problémát.
' Valid. Dim anon4 = New With {Key .FunResult = sc.someFunction(someArg)}A következtetés egy összetett kifejezésből származik.
Dim aString As String = "Act " ' Not valid. ' Dim label = New With {Key aString & "IV"}A hiba úgy oldható meg, hogy a kifejezés eredményét egy tulajdonságnévhez rendeli.
' Valid. Dim label1 = New With {Key .someLabel = aString & "IV"}Több tulajdonság következtetése két vagy több azonos nevű tulajdonságot eredményez. A korábbi példákban szereplő deklarációkra hivatkozva nem adhatja meg mindkettőt,
product.Nameéscar1.Name-t ugyanazon névtelen típus tulajdonságaként. Ennek az az oka, hogy mindegyikhez a következtetési azonosító tartozikName.' Not valid. ' Dim anon5 = New With {Key product.Name, Key car1.Name}A probléma megoldható úgy, hogy az értékeket különböző tulajdonságnevekhez rendeli.
' Valid. Dim anon6 = New With {Key .ProductName = product.Name, Key .CarName = car1.Name}Vegye figyelembe, hogy a kis- és nagybetűk közötti változások nem különböztetik meg a két nevet.
Dim price = 0 ' Not valid, because Price and price are the same name. ' Dim anon7 = New With {Key product.Price, Key price}Az egyik tulajdonság kezdeti típusa és értéke egy még nem létrehozott tulajdonságtól függ. Például a
.IDName = .LastNamenem érvényes névtelen típusdeklarációban, hacsak a.LastNamenincs már inicializálva.' Not valid. ' Dim anon8 = New With {Key .IDName = .LastName, Key .LastName = "Jones"}Ebben a példában a problémát a tulajdonságok deklarálási sorrendjének megfordításával háríthatja el.
' Valid. Dim anon9 = New With {Key .LastName = "Jones", Key .IDName = .LastName}A névtelen típusú tulajdonságnév megegyezik a tag Objectnevével. A következő deklaráció például meghiúsul, mert a
Equalsa Object metódusa.' Not valid. ' Dim relationsLabels1 = New With {Key .Equals = "equals", Key .Greater = _ ' "greater than", Key .Less = "less than"}A problémát a tulajdonság nevének módosításával háríthatja el:
' Valid Dim relationsLabels2 = New With {Key .EqualString = "equals", Key .GreaterString = "greater than", Key .LessString = "less than"}