什么看起来像是一个基本的C#查询,但我';我不是C#开发者

什么看起来像是一个基本的C#查询,但我';我不是C#开发者,c#,C#,这没有多大意义,所以请提前道歉,我不是一名C#开发者,但已经获得了一些代码来查看 我需要将一个模型对象传递给一个函数,但是我需要循环,因此需要动态地构建名称。让我们假设我通常会这样引用它 model.employee.title model.employee.forename 如何在最后一部分使用字符串引用它 我使用foreach循环各个部分,这很好,但是我需要将对象传递给函数调用。我将最后一部分的名称作为文本字符串(“title”、“forname”),但我不确定如何传递它 所以实际上我需要

这没有多大意义,所以请提前道歉,我不是一名C#开发者,但已经获得了一些代码来查看

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

model.employee.title
model.employee.forename
如何在最后一部分使用字符串引用它

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

所以实际上我需要的是使用

model.employee."title"


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

基本上,若您有一个成员名称字符串,那个么您就是在谈论反射。反射API在字段和属性之间不同,因此您需要知道它是什么,例如(其中
obj
model.employee
,而
name
是您要访问的成员的名称):

vs:

或者,使用API(顺便说一句,它比原始反射快得多——它使用了很多巫毒):


如果你开发了Mault.Engor类并使用它,你应该考虑使用Fields.

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

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

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

@Jodrell我提到的特定伏都教已经链接;如果你指的是更通用的伏都教,那么你可以通过snailmail从Intel“下载”它-一些“i7-3770”应该会有帮助。这会给我价值吗?如果是的话,那不是我的意思。我需要向函数传递一些内容,例如,它将是somehtmlfunction(m=>m.employee.name),但名称部分将是“动态的”。抱歉,我的解释很糟糕,但我对C所知甚少,因此我无疑会使用错误的术语。谢谢,我对C所知甚少,我们现在已经使用了类似于您建议的模型。
object value = obj.GetType().GetField(name).GetValue(obj);
object value = obj.GetType().GetProperty(name).GetValue(obj, null);
var wrapper = ObjectAccessor.Create(obj);
object value = wrapper[name];
    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"];