有沒有辦法在C#中動態識別設計時間屬性?例如:動態識別C#中的屬性
class MyClass
{
public string MyProperty1 { get; set; }
}
,然後引用它是這樣的:
string myVar = "MyProperty1";
MyClass.myVar = "test";
有沒有辦法在C#中動態識別設計時間屬性?例如:動態識別C#中的屬性
class MyClass
{
public string MyProperty1 { get; set; }
}
,然後引用它是這樣的:
string myVar = "MyProperty1";
MyClass.myVar = "test";
如果你想在運行時設置屬性和屬性的名稱的值只在運行時,你需要知道使用Reflection。這裏有一個例子:
public class MyClass
{
public string MyProperty1 { get; set; }
}
class Program
{
static void Main()
{
// You need an instance of a class
// before being able to set property values
var myClass = new MyClass();
string propertyName = "MyProperty1";
// obtain the corresponding property info given a property name
var propertyInfo = myClass.GetType().GetProperty(propertyName);
// Before trying to set the value ensure that a property with the
// given name exists by checking for null
if (propertyInfo != null)
{
propertyInfo.SetValue(myClass, "test", null);
// At this point you've set the value of the MyProperty1 to test
// on the myClass instance
Console.WriteLine(myClass.MyProperty1);
}
}
}
是的,當然你可以。您需要獲取與要設置的屬性相關的FieldInfo
對象。
var field = typeof(MyClass).GetField("MyProperty1");
然後從該字段信息的對象,您可以設置類的任何實例的值。
field.SetValue(myinstanceofmyclass, "test");
見MSDN: FieldInfo其他有趣的東西,你可以用反射做。
您應該區分[屬性](http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx)和[字段](http://msdn.microsoft.com/en-us /library/ms173118.aspx)並使用相應的反射方法來操縱它們。在這種情況下,'MyProperty1'是一個'property',所以調用'GetField'可能會返回null。 – 2010-12-10 10:59:40
怎麼樣只需在你的類
public class MyClass
{
public string MyProperty1 { get; set; }
public object this[string propName]
{
get
{
return GetType().GetProperty(propName).GetValue(this, null);
}
set
{
GetType().GetProperty(propName).SetValue(this, value, null);
}
}
}
實現一個索引,然後你可以做的非常相似
var myClass = new MyClass();
string myVar = "MyProperty1";
myClass[myVar] = "test";
+1突出屬性和字段需要以不同的方式訪問的東西。 – devrooms 2010-12-10 11:17:09