假设我在C#中有以下结构
public struct User
{
public string name;
public int ID;
public bool isAlive;
}
我想为此结构分配所有值。我知道如何做到的唯一方法是通过
User Bill;
Bill.ID = 1;
Bill.name = "Bill";
Bill.isAlive = false;
但有更快的方法吗?像
这样的东西User Bill = {
ID : 1,
name : "Bill",
isAlive : false
};
答案 0 :(得分:3)
为你的结构构建一个构造函数:
public struct User
{
public string name;
public int ID;
public bool isAlive;
public User(string name, int ID, bool isAlive)
{
this.name = name;
this.ID = ID;
this.isAlive = isAlive;
}
}
然后用它进行初始化:
User bill = new User("Bill", 1, false);
答案 1 :(得分:2)
是
User bill = new User{
ID = 1,
name = "Bill",
isAlive = false
};
答案 2 :(得分:1)
Structs的行为与类完全相同(只是它们是一个值类型),所以你可以 - 例如 - 使用构造函数和方法。
答案 3 :(得分:1)
虽然@ Somya的答案是正确的并且有效,但我倾向于不使用这种结构。恕我直言,正确的方法是为User
创建一个构造函数,它接受所需的参数,然后调用new User (1, "Bill", false)
。
这很容易被认为是脾脏。
答案 4 :(得分:0)
假设您没有该结构..您可以使用anonymous type:
var Bill=new {
ID=1,
name="Bill",
isAlive=false
};
var Gates=new {
ID=2,
name="Gates",
isAlive=true
};
备注:
如果程序集中的两个或多个匿名对象初始值设定项指定了具有相同顺序且具有相同名称和类型的属性序列,则编译器会将对象视为相同类型的实例。它们共享相同的编译器生成的类型信息。
结构是不可变的,但匿名类型的实例在分配后是只读的:
匿名类型提供了一种将一组只读属性封装到单个对象中的便捷方法,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。
所以你获得了匿名类型的两个好处。