0

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

5 回答 5

3

是的。

User bill = new User{
  ID = 1,
  name = "Bill",
  isAlive = false
};
于 2013-10-23T22:37:49.360 回答
3

为您的 struct 创建一个构造函数:

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);
于 2013-10-23T22:40:45.177 回答
1

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

于 2013-10-23T22:38:08.103 回答
1

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

这很容易被认为是脾脏。

于 2013-10-23T22:40:25.607 回答
0

假设您没有该结构..您可以使用匿名类型

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

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

注意备注:

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

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

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

所以你获得了匿名类型的两个好处。

于 2013-10-23T23:11:08.197 回答