动态型铸造

时间:2011-05-23 06:16:58

标签: c#

现在我觉得很清楚。 我在C#.NET中创建了一个面向对象的数据库,其中有两个类。学生和联系人。联系人是学生。我正在检索对象数组中的所有对象。班级学生有nameage字段,而联系人有mobileID

现在我正在通过文本框创建查询。创建的文本框。一个用于选择,一个用于从。 in(var1)类名称被接受,而在select(var2)中,接受字段名称。如果用户想要查看所有对象的名称,则应输入var2“name”;但我无法收到此消息

messageBox.show(obj[0] as Student).var2);

它给出错误var2,'object'不包含'var2'的定义,并且没有扩展方法'var2'接受类型'object'的第一个参数可以找到(你是否缺少using指令或程序集参考?)

如果我给var1 messageBox.show(obj[0] as var1).var2);

而不是学生,那同样的问题

我可以这样做吗?

2 个答案:

答案 0 :(得分:0)

如果不使用反射,则无法执行此操作。

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

你必须做这样的事情:

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

答案 1 :(得分:0)

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

MessageBox.show((obj[0] as Student).var2);

还要确保va2类中的Student属性是公开的:

public string var2 { get; set; }
相关问题