我正在使用一个系统,其中字段名称需要动态地为给定命名空间添加前缀。
我有什么方法可以做一些可以达到这样的事情 -
var properties = item.GetType().GetProperties();
foreach (var pi in properties)
{
pi.Name = Settings.Default.NameSpace + "_" + pi.Name;
}
答案 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