jeudi 2 avril 2015

Why I can't assign dynamic data in constructor C#?

I'm a PHP Developer... I need to do a class that can be created and fill of dynamic way, similar to this in PHP.



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;
}
}


I read about the reflection in C#, but I don't find the correct way to do. This is my C# code



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]);
}
}
}


In runtime I get an Exception



Object reference not set to an instance of an object.



The typeof(Person) I try to change it to this.getType() and I get the same.


I hope that can help me.






Aucun commentaire:

Enregistrer un commentaire