首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C#对象构造函数-简写属性语法

C#对象构造函数-简写属性语法
EN

Stack Overflow用户
提问于 2009-02-03 10:27:15
回答 3查看 18.7K关注 0票数 10

几个月前,我读到一种技术,如果您传入的参数与本地变量匹配,那么您可以使用一些简写语法来设置它们。要避免这种情况,请执行以下操作:

代码语言:javascript
复制
public string Method(p1, p2, p3)
{
    this.p1 = p1;
    this.p2 = p2;
    this.p3 = p3;
}

有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-02-03 10:32:38

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

代码语言:javascript
复制
var foo = new Foo { Bar = 1, Fizz = "hello" };

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

这种语法的诀窍在于,如果您省略了"=“并提供了一个标识符,那么它将假定您正在为具有相同名称的属性赋值。例如,如果我已经有了一个Foo实例,我可以这样做:

代码语言:javascript
复制
var foo2 = new Foo { foo1.Bar, foo1.Fizz };

因此,这与您的示例非常接近。如果您的类具有p1、p2和p3属性,并且您有同名的变量,则可以这样写:

代码语言:javascript
复制
var foo = new Foo { p1, p2, p3 };

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

票数 28
EN

Stack Overflow用户

发布于 2019-05-28 19:04:21

在C# 7中有一种更简单的方法来实现这一点--表达式体构造函数。

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

代码语言:javascript
复制
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

票数 10
EN

Stack Overflow用户

发布于 2009-02-03 10:31:57

您可能会想到C#中的“对象初始化器”,您可以通过设置类的属性来构造对象,而不是使用参数化的构造函数。

我不确定它是否可以在你的例子中使用,因为你的"this“已经被构造好了。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/506635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档