在C#中使用反射动态访问对象的属性时,避免出现空引用警告



我正试图通过使用反射来动态访问对象的属性:

class Program
{
private class MyClass
{
public int prop1 { get; set; } = 1;
public int prop2 { get; set; } = 2;
}
public static void Main()
{
var obj = new MyClass();
var propList = new List<string> { "prop1", "prop2"};
foreach (string propString in propList) 
{
var prop = obj.GetType().GetProperty(propString);
// I get a compiler warning here: "Dereference of a possibly null reference."
Console.WriteLine((int)prop.GetValue(obj));
}
}
}

我想阻止";空引用";以适当的方式发出警告。

我尝试在Console.WriteLine之前添加if (prop == null) return;检查,但这并不能解决问题。相反,它将警告变为"0";取消装箱一个可能为空的值";。

有没有办法强制propList中的字符串是MyClass中属性的名称?在这种情况下,我会很乐意用一个!因为我知道这处房产会一直存在。在我看来,这将是理想的,因为那样我在创建列表时会遇到编译器错误。

看起来不仅prop可能为null,prop.GetValue(obj)返回的值也可能为null。

尝试

var prop = obj.GetType().GetProperty(propString);
if (prop == null) return;
var o = prop.GetValue(obj);
if (o == null) return;
Console.WriteLine((int)o);

或同等产品。

最新更新