【问题标题】:2 ways to create new object by setting property values [duplicate]通过设置属性值创建新对象的2种方法[重复]
【发布时间】:2011-05-29 08:20:02
【问题描述】:

可能重复:
Why are C# 3.0 object initializer constructor parentheses optional?

大家好
我有一个类Question,它有一个属性Text

public class Question
{
    public string Text { get; set; }
}

现在我想通过赋予属性值来创建这种类型的对象。
我可以通过以下两种方式做到这一点:

Question q = new Question { Text = "Some question" };

Question q = new Question() { Text = "Some question" };

这两种情况有什么区别吗?如果它们相同,为什么我们需要两者?
谢谢。

【问题讨论】:

标签: c# .net


【解决方案1】:

如果您需要将参数传递给构造函数,请使用()

否则它不会产生任何差异......

它们都很重要,因为如果您在问题类中添加任何构造函数,那么您需要传递参数,这可以使用()

【讨论】:

    【解决方案2】:

    这两个例子完全没有区别。

    在这种情况下,仅在这种情况下,构造函数上的() 是可选的。

    【讨论】:

    • @Samvel - 代码将编译为相同的 IL,但在这种情况下编译器可以推断出括号。
    • 但是可以为这样的属性分配新值吗?比如Customer cust = _context.Customers.FirstOrDefault(c => c.Id == 1); cust{ Name = "NewName"} //error我一般是这样cust.Name = "NewName"的。只是想知道我是否可以使用与上述相同的语法来更新属性
    • @HaikalNashuha 不,这在当前语法中是不可能的。
    猜你喜欢
    • 2016-07-15
    • 2011-07-19
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多