委派对类属性的访问而不是对象属性

时间:2015-02-04 21:36:19

标签: c# .net json

我一直在试图找到一种方法来处理属性映射和以编程方式命名。问题是我不想更改代码的多个部分以便能够扩展地图。我现在的代码是这样的:

public static class Names
{
    public const string Property = "propertyNameToBeUsedInJson";
}

...
switch(propertyName)
{
    case Property:
        user.propertyToBeMapped = json.propertyValue;
        break;
}

我真正想要的是能够拥有某种字典,我可以做以下事情:

Dictionary<string, Action>() { {"propertyNameToBeUsedInJson", <Class of User>.propertyToBeMapped} };

这意味着我将委托访问Class的属性,而不是具体对象。这样我可以遍历这个字典,如果它包含我正在寻找的密钥,那么我就去改变值所指向的属性。

我认为初始化期间的开销是可以的,但我不想在每次调用的基础上使用Reflection。

问题是:是否可以使用第二种方式考虑上述陈述?如果是这样,我应该怎么做呢?

1 个答案:

答案 0 :(得分:0)

总结一下评论:

绝对可以使用字典来完成,但不能以这种方式使用属性。请记住,属性只是语法糖,因此您不必自己编写get / set方法。将它放入字典的最佳方法可能是将其包装到委托中:

new Dictionary<string, Func<YourClass, string>>() 
{ 
    {"propertyNameToBeUsedInJson",   
     instance => instance.YourProperty} 
};

然后,你会非常容易地使用它(忽略错误检查):

user.propertyToBeMapped = dictionary[propertyName](yourClassInstance);

这仅在实例始终为同一个类时才有效。如果没有,Func的第一个参数必须是某个基类(甚至可能是object),然后委托必须进行一些类型检查和转换。