我正在使用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()代码>,它也会做同样的事情。
这是由语言定义的。
从var
的留档:
重要的
当var在启用了可为空引用类型的情况下使用时,即使表达式类型不可为空,它也总是暗示可为空引用类型。编译器的空状态分析防止取消引用潜在的空值。如果变量从未分配给可能为null的表达式,编译器将不会发出任何警告。如果将变量分配给可能为null的表达式,则必须在取消引用它之前测试它是否为null,以避免任何警告。