Como: inferir tipos em declarações de tipo anônimo (Visual Basic) e nomes de propriedade
Tipos anônimos fornecem nenhum mecanismo para especificar os tipos de dados de propriedades diretamente.Tipos de todas as propriedades são inferidos.No exemplo a seguir, os tipos de Name e Price são inferidos diretamente dos valores que são usados para inicializá-los.
' Variable product is an instance of a simple anonymous type.
Dim product = New With {Key .Name = "paperclips", .Price = 1.29}
Anônimos tipos também podem interpretar nomes de propriedades e tipos de outras fontes.As seções a seguir fornecem uma lista das circunstâncias onde a inferência é possível, e exemplos de situações em que ele é não.
Inferência bem-sucedida
Anônimos tipos também podem interpretar nomes de propriedades e tipos de outras fontes.
Dos nomes de variável.Tipo anônimo anonProduct terá duas propriedades, productName e productPrice.Os tipos de dados será das variáveis do originais, String e Double, respectivamente.
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}
De propriedade ou campo Nomes de outros objetos.Por exemplo, considere um car objeto de um tipo CarClass que inclui Name e ID Propriedades.Para criar um novo tipo anônimo instância, car1,com Name e ID propriedades que são inicializadas com os valores de car objetos, você pode escrever o seguinte:
Dim car1 = New With {Key car.Name, Key car.ID}
A declaração anterior é equivalente a mais a linha de código que define car2 tipo anônimo.
Dim car2 = New With {Key .Name = car.Name, Key .ID = car.ID}
De XML membro nomes.
Dim books = <Books> <Book Author="Jesper Aaberg"> Advanced Programming Methods </Book> </Books> Dim anon = New With {books...<Book>}
O tipo de anon resultante teria uma propriedade, Book,do tipo IEnumerable (de XElement).
De uma função que não tem parâmetros, como SomeFunction no exemplo a seguir.
Dim sc As New SomeClass
Dim anon1 = New With {Key sc.SomeFunction()}
A variável anon2 no código a seguir é um tipo que tem uma propriedade, um caractere chamado First anônimo.Esse código irá exibir uma letra "E", a letra que é retornada pela função 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)
A inferência de falhas
Nome inferência falhará em muitas circunstâncias, incluindo o seguinte:
A inferência deriva de Invocação de um método, um construtor ou uma propriedade com parâmetros que necessita de argumentos.A declaração anterior de anon1 falhará se someFunction possui um ou mais argumentos.
' Not valid.
' Dim anon3 = New With {Key sc.someFunction(someArg)}
Atribuição a um novo nome de propriedade resolve o problema.
' Valid.
Dim anon4 = New With {Key .FunResult = sc.someFunction(someArg)}
A inferência deriva de uma expressão complexa.
Dim aString As String = "Act " ' Not valid. ' Dim label = New With {Key aString & "IV"}
O erro pode ser resolvido atribuindo o resultado da expressão a um nome de propriedade.
' Valid. Dim label1 = New With {Key .someLabel = aString & "IV"}
A inferência de várias propriedades produz dois ou mais propriedades que têm o mesmo nome.Referência de volta a declarações nos exemplos anteriores, você não é possível listar os dois product.Name e car1.Name Como propriedades do mesmo tipo anônimo.Isso ocorre porque o identificador inferido para cada um deles seria Name.
' Not valid.
' Dim anon5 = New With {Key product.Name, Key car1.Name}
O problema pode ser resolvido atribuindo valores a nomes de propriedades distintas.
' Valid. Dim anon6 = New With {Key .ProductName = product.Name, Key .CarName = car1.Name}
Observe que as alterações caso (alterações entre letras maiúsculas e minúsculas) não faça dois nomes distintos.
Dim price = 0
' Not valid, because Price and price are the same name.
' Dim anon7 = New With {Key product.Price, Key price}
O tipo inicial e valor de uma propriedade depende outra propriedade que ainda não é estabelecida.Por exemplo, .IDName = .LastName não é válido em um declaração de tipo anônimo a menos que .LastName já esteja inicializado.
' Not valid.
' Dim anon8 = New With {Key .IDName = .LastName, Key .LastName = "Jones"}
Nesse exemplo, você pode corrigir o problema, invertendo a ordem na qual as propriedades são declaradas.
' Valid. Dim anon9 = New With {Key .LastName = "Jones", Key .IDName = .LastName}
Uma propriedade Nome do tipo anônimo é o mesmo como o nome de um membro do Object.Por exemplo, a seguinte declaração falha porque Equals é um método de Object.
' Not valid.
' Dim relationsLabels1 = New With {Key .Equals = "equals", Key .Greater = _
' "greater than", Key .Less = "less than"}
Você pode corrigir o problema alterando o nome da propriedade:
' Valid Dim relationsLabels2 = New With {Key .EqualString = "equals", Key .GreaterString = "greater than", Key .LessString = "less than"}
Consulte também
Referência
Conceitos
Inicializadores de objeto: Nomeados e anônimos tipos (Visual Basic)