几个月前,我读到一种技术,如果您传入的参数与本地变量匹配,那么您可以使用一些简写语法来设置它们。要避免这种情况,请执行以下操作:
public string Method(p1, p2, p3)
{
this.p1 = p1;
this.p2 = p2;
this.p3 = p3;
}有什么想法吗?
发布于 2009-02-03 10:32:38
您可能正在考虑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 };请注意,这仅用于构造实例-而不是如示例所示将参数传递给方法-因此它可能不是您想要的。
发布于 2019-05-28 19:04:21
在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);有关更多信息,请参阅以下链接:
发布于 2009-02-03 10:31:57
您可能会想到C#中的“对象初始化器”,您可以通过设置类的属性来构造对象,而不是使用参数化的构造函数。
我不确定它是否可以在你的例子中使用,因为你的"this“已经被构造好了。
https://stackoverflow.com/questions/506635
复制相似问题