有没有一种 DRYer 方法可以在 C# 中初始化 class 值?

Is there a DRYer way to initialise class values in C#?

假设我有一个 class:

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;
        //...
    }

这很无聊,而且似乎没有遵循“不要重复自己”的原则,所以我正在寻找更好的解决方案。这个可以做DRYer吗?

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

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);

我认为更干净,似乎就是您所追求的。

如果您真的不想重复自己

,请在初始化 variables/properties 时使用对象初始化

像这样

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

另外,不要在您的字段上使用 public 访问器,那样不好。