在 C# 中分配结构的多个值

本文关键字:结构 分配 | 更新日期: 2023-09-27 18:36:49

假设我在 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
};

在 C# 中分配结构的多个值

是的。

User bill = new User{
  ID = 1,
  name = "Bill",
  isAlive = false
};

为你的结构做一个构造函数:

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);
结构的行为

与类完全相同(只是它们是值类型),因此您可以使用构造函数和方法。

虽然@Somya的答案是正确的并且有效,但我倾向于不使用这种结构。恕我直言,执行此操作的正确方法是为 User 创建一个构造函数,该构造函数采用所需的参数,然后调用 new User (1, "Bill", false)

这很容易被认为是脾脏。

假设你没有这种结构......你可以使用匿名类型:

var Bill=new {
    ID=1,
    name="Bill",
    isAlive=false
};
var Gates=new {
    ID=2,
    name="Gates",
    isAlive=true
};

请注意备注:

如果程序集中的两个或多个匿名对象初始值设定项指定顺序相同且具有相同名称和类型的属性序列,则编译器会将这些对象视为相同类型的实例。它们共享相同的编译器生成的类型信息。

结构是不可变的,但匿名类型的实例在分配后是只读的:

匿名类型提供了一种将一组只读属性封装到单个对象中的便捷方法,而无需先显式定义类型。类型名称由编译器生成,在源代码级别不可用。每个属性的类型由编译器推断。

因此,您获得了匿名类型的两个好处。