几个月前,我读到了一种技术,如果传入的参数与局部变量匹配,那么你可以使用一些简短的语法来设置它们。为了避免这种情况:
public string Method(p1, p2, p3)
{
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}
有什么想法吗?
答案 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);
有关更多信息,请参见以下链接:-