我想创建一个类的属性,并使用变量值设置该属性的名称。
E.g。
string resultValue = "stack";
MyClass myclass = new MyClass();
myclass.resultValue = "overflow";
现在,在这种情况下,stack
是属性名称,"overflow"
是stack
属性的值。
请告诉我们怎么可能。
提前致谢。
答案 0 :(得分:3)
您可以使用Reflection。例如:
string name = "stack";
string value = "overflow";
PropertyInfo pi = typeof(MyClass).GetProperty(name);
MyClass instance = new MyClass();
pi.SetValue(instance, value, null);
// at this stage instance.stack equals to "overflow"
这显然假设MyClass
具有公共设置器的公共属性堆栈:
public class MyClass
{
public string stack { get; set; }
}
答案 1 :(得分:1)
你应该使用Reflection
MyClass myclass = new MyClass();
Type type = typeof(MyClass);
PropertyInfo property = type.GetProperty("stack");
property.SetValue(myclass, "overflow", null);
答案 2 :(得分:0)
我认为MSDN上的Dynamic Source Code Generation and Compilation部分应该包含您需要的信息。
.NET Framework包含一种称为代码文档的机制 对象模型(CodeDOM),使开发人员能够发出的程序 用于生成多种编程语言的源代码的源代码 在运行时,基于代表代码的单个模型 渲染。
我认为您也可以使用Reflection完成此操作。
答案 3 :(得分:0)
我无法想象为什么你想在你的班级上产生财产,但要考虑其他方式。例如。使用Dictionary
:
class MyClass
{
Dictionary<string, object> _values = new Dictionary<string, object>();
public object this[string name]
{
get
{
if (!_values.ContainsKey(name))
throw new ArgumentException(name);
return _values[name];
}
set
{
if (!_values.ContainsKey(name))
{
_values.Add(name, value);
return;
}
_values[name] = value;
}
}
}
用法:
MyClass myClass = new MyClass();
myClass["stack"] = "overflow";
Console.WriteLine(myClass["stack"]);
答案 4 :(得分:0)
也许你应该看看DynamicObject
。通过这个,您可以通过简单地分配值在运行时创建属性。也可以在MSDN article找到一个示例。
答案 5 :(得分:0)
看看Mark Gravell的FastMember
它允许您以动态方式设置属性。
// obj could be static or DLR
var wrapped = ObjectAccessor.Create(obj);
string propName = // something known only at runtime
答案 6 :(得分:-1)
据我所知,这是不可能的。您可以尝试使用字典。