C#Object Constructor - 简写属性语法

时间:2009-02-03 10:27:15

标签: c# class object

几个月前,我读到了一种技术,如果传入的参数与局部变量匹配,那么你可以使用一些简短的语法来设置它们。为了避免这种情况:

public string Method(p1, p2, p3)
{
    this.p1 = p1;
    this.p2 = p2;
    this.p3 = p3;
}

有什么想法吗?

3 个答案:

答案 0 :(得分:25)

您可能正在考虑C#3.0中的新对象初始化程序语法。它看起来像这样:

var foo = new Foo { Bar = 1, Fizz = "hello" };

所以这给了我们一个新的Foo实例,“Bar”属性初始化为1,“Fizz”属性为“hello”。

使用这种语法的技巧是,如果省略“=”并提供标识符,它将假定您正在分配给同名的属性。所以,例如,如果我已经有一个Foo实例,我可以这样做:

var foo2 = new Foo { foo1.Bar, foo1.Fizz };

然后,这与你的例子非常接近。如果你的类有p1,p2和p3属性,并且你有同名的变量,你可以写:

var foo = new Foo { p1, p2, p3 };

请注意,这仅用于构造实例 - 不是用于将参数传递给方法,如您的示例所示 - 因此它可能不是您想要的。

答案 1 :(得分:2)

您可能正在考虑C#中的“对象初始值设定项”,您可以通过设置类的属性来构造对象,而不是使用参数化构造函数。

我不确定它是否可用于您已经构建“this”的示例中。

答案 2 :(得分:0)

在C#7中,还有一种更简单的方法-表达式构造器。

使用上面的示例-您的构造函数可以简化为一行代码。我为完整起见已包含了班级字段,我想无论如何它们都会在您的班级上出现。

private string _p1;
private int _p2;
private bool _p3;  

public Method(string p1, int p2, bool p3) => (_p1, _p2, _p3) = (p1, p2, p3);

有关更多信息,请参见以下链接:-

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/expression-bodied-members