vb.net对象初始化列表(Of T)

Tim*_*mes 15 vb.net syntax

我一直在看一些C#代码:

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},  
    };
Run Code Online (Sandbox Code Playgroud)

现在当我将其转换为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 _  
} _  
}  
Run Code Online (Sandbox Code Playgroud)

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

现在我可以使用代码获得一组员工:

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 _
} _  
}    
Run Code Online (Sandbox Code Playgroud)

但我想知道List(Of Employee)为什么这在vb.net中不起作用?

Mar*_*rkJ 19

在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 _ 
    } _ 
}   
Run Code Online (Sandbox Code Playgroud)

  • 这个和刚做"New List(Of Employee)"({...新员工代码在这里......})之间有什么性能差异吗? (2认同)

Dav*_*und 18

编辑 (2)
正如评论中所指出的,现在已经引入了VB.NET集合初始化器,并且以下很多帖子应该被认为是过时的.

编辑
不要总是盲目地信任C#到VB.NET转换器
这是一个方便的在线转换工具

原来VB.NET没有集合初始化器.这意味着没有等价的

var myList = new List<string>()
{
   "abc",
   "def"
};
Run Code Online (Sandbox Code Playgroud)

...但它确实有对象初始化器.因此,您可以创建一个类的实例并一次性为其属性赋值,但是您不能一次创建列表的实例并向其添加项目.

你可以得到的最接近的是上面的链接.您可以创建一个数组并在一次操作中向其中添加项目,然后您必须使用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()
Run Code Online (Sandbox Code Playgroud)

  • 集合初始化程序已添加到[VB.Net 2010](http://msdn.microsoft.com/en-us/library/dd293617.aspx)中.等同于你的C#集合初始化程序是`Dim myList = New List(Of String)From {"abc","def"}` (2认同)