【发布时间】:2022-01-15 18:36:15
【问题描述】:
我正在使用 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);
}
变量property 的自动检测类型解析为可空类型ModelEnumerationAttributeProperty?。
这似乎是对 vanilla 类的简单构造函数调用。构造函数可以抛出异常但不能返回 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);
}
如果不可为空,编译器不会标记此重载和返回类型。我还不如打电话给var o = new object();,它会做同样的事情。
【问题讨论】:
-
虽然不是构造函数调用,而是静态方法调用。
-
我在您的代码中没有看到任何
new T()。ModelEnumerationAttributeProperty.FromPropertyInfo方法的返回类型很可能是T?。 -
看起来你正在调用一个不同的
FromPropertyInfo重载,它只需要PropertyInfo。能否也包含该方法的代码? -
编辑问题以添加相关代码。
标签: c# visual-studio-2012 nullable .net-6.0 c#-10.0