2010-07-15 10 views
14

He estado buscando en algún código C#:objeto vb.net Lista initialiser (Of T)

List<Employee> Employees = new List<Employee>{ 
    new Employee{firstname="Aamir",lastname="Hasan",age=20}, 
    new Employee{firstname="awais",lastname="Hasan",age=50}, 
    new Employee{firstname="Bill",lastname="Hasan",age=70}, 
    new Employee{firstname="sobia",lastname="khan",age=80}, 
    }; 

Ahora cuando convierto esto a vb.net

Dim Employees as List(Of Employee) = New List(Of Employee)() With { New Employee() With { _ 
.firstname = "Aamir", _ 
.lastname = "Hasan", _ 
.age = 20 _ 
}, _ 
New Employee() With { _ 
.firstname = "awais", _ 
.lastname = "Hasan", _ 
.age = 50 _ 
}, _ 
New Employee() With { _ 
.firstname = "Bill", _ 
.lastname = "Hasan", _ 
.age = 70 _ 
}, _ 
New Employee() With { _ 
.firstname = "sobia", _ 
.lastname = "khan", _ 
.age = 80 _ 
} _ 
} 

me sale el error " El nombre del campo o propiedad que se inicializa en un inicializador de objetos debe comenzar con '.'. "

Ahora puede obtener una gran variedad de empleado utilizando el código:

Dim Employees = { New Employee() With { _ 
.FirstName = "Aamir", _ 
.LastName = "Hasan", _ 
.Age = 20}, _ 
New Employee() With { _  
.FirstName = "Awais", _ 
.LastName = "Hasan", _ 
.Age = 50}, _ 
New Employee() With { _ 
.FirstName = "Bill", _ 
.LastName = "Hasan", _ 
.Age = 70 _ 
} _ 
}  

pero me gustaría un List(Of Employee) ya que me está molestando de por qué esto no funciona en vb.net?

Respuesta

18

EDITAR(2)
Como se señaló en los comentarios, VB.NET collection initializers ahora se han introducido, y una gran cantidad de la siguiente puesto será considerado obsoleto.

EDITAR
Don't always blindly trust the C# to VB.NET converter
Here's a handy tool for online conversion

Resulta que VB.NET doesn't have collection initializers. Lo que significa que no hay equivalencia de

var myList = new List<string>() 
{ 
    "abc", 
    "def" 
}; 

... pero hace tienen inicializadores de objeto. De modo que puede crear una instancia de una clase y asignar valores a sus propiedades, todo de una vez, pero no puede crear una instancia de una lista y agregarle elementos de una sola vez.

Lo más cercano que puede obtener es en el enlace de arriba. Puede crear un Array y agregarle elementos en una sola operación, y luego tiene que ToList ese conjunto.

Así que esta vez he compilado el código y funciona. Lo siento por la molestia

Dim EmployeesTemp As Employee() = { _ 
     New Employee() With { _ 
      .firstname = "Aamir", _ 
      .lastname = "Hasan", _ 
      .age = 20 _ 
     }, _ 
     New Employee() With { _ 
      .firstname = "awais", _ 
      .lastname = "Hasan", _ 
      .age = 50 _ 
     }, _ 
     New Employee() With { _ 
      .firstname = "Bill", _ 
      .lastname = "Hasan", _ 
      .age = 70 _ 
     }, _ 
     New Employee() With { _ 
      .firstname = "sobia", _ 
      .lastname = "khan", _ 
      .age = 80 _ 
     } _ 
    } 

    Dim Employees as List(Of Employee) = EmployeesTemp.ToList() 
+0

Disculpa, este sigue dando el mismo error. El nombre del campo o la propiedad que se inicializa en un inicializador de objetos debe comenzar con '.'. Utilicé esa práctica herramienta al convertirla originalmente :) siempre la uso. –

+1

@JimJams: ¡ja! eso me hizo investigar bien. Diría que es hora de que te unas al lado de C#. pero bueno, mira mi respuesta actualizada. –

+1

Gracias David, esto funciona como un regalo, y sí, ¡es hora de unirme al equipo de C#! –

18

inicializadores colección fueron added in VB.NET 2010. Este es el código de aire, pero aquí va:

Dim Employees as List(Of Employee) = New List(Of Employee)() From 
{ 
    New Employee() With { _ 
     .firstname = "Aamir", _ 
     .lastname = "Hasan", _ 
     .age = 20 _ 
    }, _ 
    New Employee() With { _ 
     .firstname = "awais", _ 
     .lastname = "Hasan", _ 
     .age = 50 _ 
    }, _ 
    New Employee() With { _ 
     .firstname = "Bill", _ 
     .lastname = "Hasan", _ 
     .age = 70 _ 
    }, _ 
    New Employee() With { _ 
     .firstname = "sobia", _ 
     .lastname = "khan", _ 
     .age = 80 _ 
    } _ 
} 
+1

VB2010 también puede detectar continuidades de línea automáticamente, por lo que es posible que los guiones bajos también sean innecesarios – MarkJ

+0

¿Pensé que siempre los necesitaba? – Coops

+1

@codeblend En algunos casos, si omite el carácter de continuación de línea, el compilador de Visual Basic continuará implícitamente la instrucción en la siguiente línea de código. [Documentación] (http://msdn.microsoft.com/en-us/library/vstudio/ba9sxbw4.aspx) – MarkJ

0

¿Qué tal esto?

Dim Employees As List(Of Employee) = { _ 
    New Employee() With { .firstname = "Aamir", .lastname = "Hasan", .age = 20 }, _ 
    New Employee() With { .firstname = "awais", .lastname = "Hasan", .age = 50 }, _ 
    New Employee() With { .firstname = "Bill", .lastname = "Hasan", .age = 70 }, _ 
    New Employee() With { .firstname = "sobia", .lastname = "khan", .age = 80 } _ 
}.ToList() 
Cuestiones relacionadas