3

这没有多大意义,所以提前道歉,我不是 C# 开发人员,但已经给出了一些代码来查看。

我需要将模型对象传递给函数,但是我循环遍历,因此需要动态构建名称。所以让我们假设我通常会这样引用它。

model.employee.title
model.employee.forename

我如何在最后一部分使用字符串来引用它。

我正在使用 foreach 循环各个部分,这很好,但是我需要将对象传递给函数调用。我将最后一部分的名称作为文字字符串(“title”,“forname”),但我不确定如何传递它。

如此有效地,我需要使用类似的东西

model.employee."title"

或者

model.employee.varContainingTheName

我知道这些不起作用,但不知道如何进行。

4

2 回答 2

3

基本上,如果您有一串成员名称,那么您就是在谈论反射。反射 API 在字段和属性之间有所不同,因此您需要知道它是哪一个,例如(在哪里objmodel.employee并且name是您要访问的成员的名称):

object value = obj.GetType().GetField(name).GetValue(obj);

与:

object value = obj.GetType().GetProperty(name).GetValue(obj, null);

或者,使用FastMember 之类的 API (顺便说一下,它比原始反射快得多 - 它使用了很多巫术):

var wrapper = ObjectAccessor.Create(obj);
object value = wrapper[name];
于 2012-10-05T10:52:06.250 回答
1

如果你开发 model.employee 类并像这样使用它,你应该考虑使用字典来归档。

    class employee
    {
        public Dictionary<string, object> properties = new Dictionary<string,object>();

        public employee()
        {
            properties.Add("time", DateTime.Now);
            properties.Add("name", "Bill Gates");
        }
    }

然后像这样使用它:

        Employee employee = new Employee();
        employee.properties["time"];

这段代码将更快更容易阅读。

于 2012-10-05T11:04:17.663 回答