提问者:小点点

为什么使用[var x=new T()?


我正在使用VS2022,。NET 6,C#10,在项目范围内启用了可为空上下文。

public static ModelEnumerationAttributeProperty FromPropertyInfo (PropertyInfo propertyInfo, object value)
{
    var property = ModelEnumerationAttributeProperty.FromPropertyInfo(propertyInfo);

    property.PropertyValue = value;
    property.PropertyValueString = value?.ToString();

    return (property);
}

变量属性的自动检测类型正在解析为可为空的类型ModelEnumerationAttribute属性

它似乎是对普通类的简单构造函数调用。构造函数可以抛出异常,但不能返回null。

那么为什么使用[var x=new T()]会自动解析为

更新:*以下是调用构造函数的静态重载:

public static ModelEnumerationAttributeProperty FromPropertyInfo (PropertyInfo propertyInfo)
{
    var property = new ModelEnumerationAttributeProperty();

    property.PropertyInfo = propertyInfo;
    property.Type = propertyInfo.PropertyType;
    property.Name = propertyInfo.PropertyType.Name;
    property.FullName = propertyInfo.PropertyType.FullName ?? "";
    property.AssemblyQualifiedName = propertyInfo.PropertyType.AssemblyQualifiedName ?? "";

    property.PropertyName = propertyInfo.Name;

    return (property);
}

编译器不会标记此重载和返回类型(如果不可为null)。我还不如调用varo=newobject(),它也会做同样的事情。


共1个答案

匿名用户

这是由语言定义的。

var的留档:

重要的

当var在启用了可为空引用类型的情况下使用时,即使表达式类型不可为空,它也总是暗示可为空引用类型。编译器的空状态分析防止取消引用潜在的空值。如果变量从未分配给可能为null的表达式,编译器将不会发出任何警告。如果将变量分配给可能为null的表达式,则必须在取消引用它之前测试它是否为null,以避免任何警告。