2010-07-15 10 views
14

que je cherchais à un code C#:vb.net Object Initialiser List (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}, 
    }; 

Maintenant, quand je convertir en 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 _ 
} _ 
} 

je reçois l'erreur " Le nom du champ ou de la propriété en cours d'initialisation dans un initialiseur d'objet doit commencer par '.'. "

Maintenant, je peux obtenir un tableau d'employés utilisant le code:

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 _ 
} _ 
}  

Mais je voudrais un List(Of Employee) comme il me tracasse de savoir pourquoi ce travail ne marche pas dans vb.net?

Répondre

18

EDIT(2)
Comme indiqué dans les commentaires, VB.NET collection initializers ont été introduites, et beaucoup du poste suivant devrait être considérée comme obsolète.

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

Turns out VB.NET doesn't have collection initializers. Ce qui signifie qu'il n'y a pas d'équivalence de

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

... mais il ne ont initialiseurs d'objets. Vous pouvez donc créer une instance d'une classe et affecter des valeurs à ses propriétés en une fois, mais vous ne pouvez pas créer une instance de liste et y ajouter des éléments en une fois.

Le plus proche est le lien ci-dessus. Vous pouvez créer un Array et ajouter des éléments en une seule opération, puis vous devez ToList ce tableau.

Donc, cette fois, j'ai effectivement compilé le code moi-même, et cela fonctionne. Désolé pour les tracas

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

Désolé, cela donne toujours la même erreur. Le nom du champ ou de la propriété en cours d'initialisation dans un initialiseur d'objet doit commencer par '.'. J'ai utilisé cet outil pratique lors de la conversion à l'origine :) toujours l'utiliser. –

+1

@JimJams: hah! ça m'a fait faire des recherches. Je dirais qu'il est temps de rejoindre le côté C#. mais bon, voir ma réponse mise à jour. –

+1

Merci David, ça marche, et oui, il est temps que je rejoins le côté C#! –

18

initialiseurs Collection étaient added in VB.NET 2010. Ceci est le code de l'air, mais voilà:

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 peut également parfois détecter les continuations de ligne automatiquement, il est donc possible que les traits de soulignement sont également inutiles – MarkJ

+0

Je pensais que vous en aviez toujours besoin? – Coops

+1

@codeblend Dans certains cas, si vous omettez le caractère de continuation de ligne, le compilateur Visual Basic continue implicitement l'instruction sur la ligne de code suivante. [Documentation] (http://msdn.microsoft.com/en-us/library/vstudio/ba9sxbw4.aspx) – MarkJ

0

Que pensez-vous de cela?

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() 
Questions connexes