有没有一种DRYer方法来初始化C#中的类值



假设我有一个类:

class Foo
{
private int blah;
private char bleh;
private string bluh;
//...
public Foo()
{
}
}

现在正常情况下,我必须这样初始化它:

public Foo(int blah, char bleh, string bluh,...)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}

这很无聊,似乎没有遵循";不要重复自己"原则,所以我正在寻找一个更好的解决方案。这能做到吗?

编辑:将变量更改为private,以反映更常见的用例。

如果您真的不想重复自己的,请在初始化变量/属性时使用对象初始化

像这个

Foo f = new foo{
blah = 1;
bleh = 'A';
bluh = "something";
};

另外,不要在字段上使用公共访问器,这是不好的。

class Foo
{
public readonly int blah;
public readonly char bleh;
public readonly string bluh;
//...
public Foo(int blah, char bleh, string bluh)
{
this.blah=blah;
this.bleh=bleh;
this.bluh=bluh;
//...
}
}

可以写为记录类型,并且是一个很好的候选者,因为它是不可变的。要将以上内容重写为记录,只需使用

public record Foo(int blah, char bleh, string bluh);

在我看来要干净得多,而且似乎是你想要的。