我是一名PHP開發人員... 我需要創建一個可以創建並填充動態方式的類,類似於PHP。爲什麼我不能在構造函數C#中分配動態數據?
class Person{
private $name;
private $age;
function __construct($params = array()){
foreach ($this as $key => $val) {
$this -> $key = (isset($params[$key])) ? $params[$key] : "";
}
}
function getName(){
return $this->name;
}
function getAge(){
return $this->age;
}
function setName($value){
$this->name = $value;
}
function setAge($value){
$this->age = $value;
}
}
我讀了關於C#中的反射,但我沒有找到正確的方法。 這是我的C#代碼
public class Person
{
private String _name { get { return _name; } set { _name = value; } }
private int _age { get { return _age; } set { _age = value; } }
public Person()
{
}
public Person(Hashtable _data)
{
PropertyInfo[] propertyInfos;
propertyInfos = typeof(Person).GetProperties(BindingFlags.NonPublic | BindingFlags.Instance);
foreach (var propInfo in propertyInfos)
{
typeof(Person).GetProperty(propInfo.Name).SetValue(this, _data[propInfo.Name]);
}
}
}
在運行時我得到一個異常
對象引用不設置到對象的實例。
typeof(Person)我試圖將其更改爲this.getType(),並且我得到了相同的結果。
我希望能幫到我。
你是屬性setter自稱...永遠。你不想這樣定義你的屬性。你也應該使用'Dictionary'而不是'HashTable'。當.NET 2.0推出時,'HashTable'變得過時。 – Servy 2015-04-02 18:11:55
更好地使用'IDictionary'。 'Hashtable'是舊的.NET 1.0的東西。另外,對於私人成員,您可以使用字段而不是屬性。 –
2015-04-02 18:14:42
也有沒有得到一個屬性信息的要點,然後問具有該屬性信息的名稱的屬性類型以獲取相同的屬性信息。您已經擁有屬性信息,只需使用它。 – Servy 2015-04-02 18:16:08