2014-12-23 4 views
-3

Хорошо, привет там. У меня есть класс, в котором я хочу написать usiversal saver. Таким образом, этот класс может быть унаследован, мы не можем просто получить некоторые значения из файла и поместить их в поля. Я сделал это таким образом:Ошибка при получении значения поля

virtual public void Load(string filename) { 
    if (!File.Exists(filename)) throw new FileNotFoundException("File not found."); 
    FileStream fs = File.OpenRead(filename); 
    BinaryFormatter bf = new BinaryFormatter(); 
    object loaded = bf.Deserialize(fs); 
    if (!(loaded is Application)) throw new TypeLoadException("File doesn't consist any applications."); 
    Application temp = loaded as Application; 
    fs.Close(); 
    foreach (System.Reflection.MemberInfo item in temp.GetType().GetMembers()) { 
     object value = temp.GetType().GetProperty(item.Name).GetValue(temp, null); 
     this.GetType().GetProperty(item.Name).SetValue(this, value, null); 
    } 
} 

Но, на линии object value ... я получил сообщение об ошибке:

enter image description here

Ok, я думал, что это произошло, потому что я не задан тип (но ? object ...)
Итак, я попытался это сделал:

foreach (System.Reflection.MemberInfo item in temp.GetType().GetMembers()) { 
    Type varType = item.GetType(); 
    object value = temp.GetType().GetProperty(item.Name).GetValue(temp, null) as varType; 
    this.GetType().GetProperty(item.Name).SetValue(this, value, null); 
} 

Теперь ошибка The type or namespace 'varType' could not be found. Помоги мне, пожалуйста! Благодарю.

P.S. MonoDevelop, Ubuntu 14.04.

+0

я не могу ничего, что может быть 'null' :( – Efog

+0

Результатом' GetProperty' является 'null', если нет имущества с прилагающегося по имени. –

ответ

1

Если вы хотите получить Properties, то почему вы используете GetMembers? Не все члены класса являются собственностью, но вы относитесь к ним так, как они.

foreach (var prop in temp.GetType().GetProperties()) { 
    object value = prop.GetValue(temp, null); 
    prop.SetValue(this, value, null); 
} 
+0

Большое спасибо, это работает! – Efog

+0

найдено Ok, я поспешил. Temp.GetType(). GetProperties() 'возвращает пустой список, но у меня есть 3 свойства в моем классе. – Efog

+0

Спасибо в любом случае, я использовал' GetFields() ', и теперь он работает: D – Efog

Смежные вопросы