C# 动态型铸造

C# 动态型铸造,c#,C#,现在我想这是清楚的。 我在C.NET中创建了一个面向对象的数据库,其中有两个类。学生和联系人。联系人在学生内部。我正在检索对象数组中的所有对象。Class student有name和age字段,而contact有mobileID字段 现在我通过文本框创建一个查询。创建文本框。一个用于选择,一个用于从。在fromvar1中,接受类名,而在selectvar2中,接受字段名。若用户希望看到所有对象的名称,则应输入var2 name;但是我不能得到这个信息 messageBox.show(obj[0]

现在我想这是清楚的。 我在C.NET中创建了一个面向对象的数据库,其中有两个类。学生和联系人。联系人在学生内部。我正在检索对象数组中的所有对象。Class student有name和age字段,而contact有mobileID字段

现在我通过文本框创建一个查询。创建文本框。一个用于选择,一个用于从。在fromvar1中,接受类名,而在selectvar2中,接受字段名。若用户希望看到所有对象的名称,则应输入var2 name;但是我不能得到这个信息

messageBox.show(obj[0] as Student).var2);
它给出了错误var2,“object”不包含“var2”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“var2”。是否缺少using指令或程序集引用

如果我将var1.messageBox.showobj[0]作为var1.var2给出,则问题与学生相同


我可以这样做吗?

如果不使用反射,就不能这样做

var2是一个包含属性名称的变量。您不能只说obj.var2,然后获取名称在var2中的属性的值

你必须这样做:

var objType = obj[0].GetType();
var propInfo = objType.GetProperty(var2);
var value = propInfo.GetValue(obj[0], null);

您的语法看起来很奇怪,右括号的数量与开头不匹配。也许:

MessageBox.show((obj[0] as Student).var2);
还要确保此va2属性在学生类中是公共的:


开始括号和结束括号计数不匹配计算你的括号,你必须在一行/语句中有相同数量的and。如果你知道该实例是学生,为什么不向学生实际转换一次并从那里开始工作。。。每次访问一个属性时,在所有地方都有一大堆强制转换,这并不是完全正确的性能…它是给错误对象引用未设置为对象的实例它是给错误对象引用未设置为对象的实例object@BhartoJoshi-检查哪个对象引用为空。如果它是propInfo,那么obj[0]没有名为whatever的公共属性存储在var2中。检查var2的值,并查看GetProperty的重载,如果要查找的属性是继承的或不是公共的,则该重载包含绑定标志。如果obj[0]本身为空,则我无法帮助您。无法从空引用获取属性的值。
public string var2 { get; set; }