有没有办法通过C#中的反射来更改属性名称?

时间:2015-10-23 14:12:17

标签: c# reflection

我正在使用一个系统,其中字段名称需要动态地为给定命名空间添加前缀。

我有什么方法可以做一些可以达到这样的事情 -

var properties = item.GetType().GetProperties();
foreach (var pi in properties)
{
    pi.Name = Settings.Default.NameSpace + "_" + pi.Name;
}

1 个答案:

答案 0 :(得分:3)

也许这是一个X-Y问题,但无论如何我想回答它。

不,你不能。为什么?让我们看看如果可以将会发生什么。我们有一个班级:

public class Something {
    public static object MyProp {get; set;} //I use a static property here just for convenience
}

现在你使用一些神秘的反射方法将属性更改为IChangedIt

Something.MyProp = 5;
MysteriousReflectionMethod ();
Something.MyProp = 10;

这段代码会编译吗?没人知道。在该方法之后,MyProp是否存在?我的意思是编译器知道在Something中有一个MyProp。但是,在更改它的名称后,就没有这样的属性了!

这是一个悖论!

是的,所以基本上你不能......

现在关于X-Y问题......

您可能只想拥有键值对,有时您想要更改键。您可以使用Dictionary<TKey, TValue>。您可以在其中放置键值对,您可以更改键!这是文档:

https://msdn.microsoft.com/en-us/library/xfhwa508(v=vs.110).aspx