2010-07-15 72 views
14

我一直在寻找一些C#代码:vb.net对象初始化器列表(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}, 
    }; 

现在,当我将它转换为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 _ 
} _ 
} 

我得到的错误“在对象初始值设定项中初始化的字段或属性名称必须以'。'开头。“

现在我可以使用代码员工的数组:

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

但我想一个List(Of Employee),因为它是缠着我,为什么在vb.net这不工作?

回答

18

编辑(2)
正如在评论中指出,VB.NET collection initializers现在已经被引入,并大量以下职位的,应认为是过时的。

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

原来VB.NET doesn't have collection initializers。这意味着不存在

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

等价...但它确实对象初始值。因此,您可以创建一个类的实例并一次性将值分配给其属性,但不能创建列表实例并一次添加项目。

有最接近你可以得到是在上面的链接。您可以创建一个阵列并在一次操作中向其中添加项目,然后您必须为ToList该阵列。

所以这一次,我已经真正编译了自己的代码,它的工作原理。麻烦对不起

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

对不起,这仍然给出了同样的错误。 在对象初始值设定项中初始化的字段或属性的名称必须以'。'开头。 当我最初转换它时,我使用了那个方便的工具:)总是使用它。 – 2010-07-15 21:04:48

+1

@JimJams:哈!这让我做了一些研究。我会说现在是你加入C#端的时候了。但是,嘿,看到我更新的答案。 – 2010-07-15 22:11:35

+1

感谢大卫,这是一种享受,是的,现在是我加入C#的时候了! – 2010-07-17 15:54:24

18

收集初始化者为added in VB.NET 2010。这是空码,但这里有:

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有时也会自动检测行延续,所以可能下划线也是不必要的 – MarkJ 2012-05-04 13:36:58

+0

我以为你总是需要那些? – Coops 2013-02-01 10:13:56

+1

@codeblend在某些​​情况下,如果您省略了续行字符,Visual Basic编译器将在下一行代码中隐式继续该语句。 [文档](http://msdn.microsoft.com/en-us/library/vstudio/ba9sxbw4.aspx) – MarkJ 2013-02-01 14:55:23

0

这个怎么样?

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