我应该在linq的select方法中使用构造函数还是花括号来创建对象?

6rqinv9w  于 2023-05-20  发布在  其他
关注(0)|答案(1)|浏览(162)

例如:

var list = ApplicationContext.Employees
    .Select(x => new Employee()
    {
        FirstName = x.FirstName,
        LastName = x.LastName
    });
var list = ApplicationContext.Employees
    .Select(x => new Employee(
        FirstName = x.FirstName,
        LastName = x.LastName
    ));

添加了可空类型后,似乎最好只为dto创建一个构造函数。这样你就不必处理可空的警告了。
你应该在select中使用构造函数还是花括号?
这两种方法是否存在性能差异?

pprl5pva

pprl5pva1#

通过在C# 11中添加required修饰符,您可以在没有警告和ctor的情况下使用dto:
required修饰符表示它所应用的字段或属性必须由对象初始化器初始化。任何初始化该类型的新示例的表达式都必须初始化所有必需的成员。required修饰符从C# 11开始可用。required修饰符使开发人员能够创建必须正确初始化属性或字段的类型,但仍然允许使用对象初始值设定项进行初始化

public class Employee
{
    public required string FirstName { get; init; }
    public required string LastName { get; init; }
}

所以编译器会控制你是否还没有初始化相应的属性(即类似new Employee(){FirstName = x.FirstName}的东西将无法编译)。
sharplab.io

相关问题