2016-04-19 3 views
2

Я ищу лучший способ заполнить свойства объекта. Это та ситуация:Лучший способ добавить значения к объекту?

Мне нужно отправить объект в dll-метод, этот объект имеет свойства имени по умолчанию (которое я покажу позже). На самом деле для ревалоризировать все свойства dinamicall я создал словарь первый, как это:

IDictionary<string, string> user = new Dictionary<string, string>(); 

позже в add методе я прошу пользователю вставить значение, как это:

Console.WriteLine("Insert user name:"); 
user["name"] = Console.ReadLine(); //valorized dictionary index 
Console.WriteLine("Insert surname: "); 
user["surname"] = Console.ReadLine(); 

после этого Я добавляю индекс словаря к свойству объекта:

object data = new{ 
    name = user["name"], 
    surname = user["surname"] 
}; 

User.add(data); //Send the user to add to rest resource.. 

Как вы можете видеть этот путь, на мой взгляд, немного длинный. Я хочу избежать использования словаря и напрямую нажать данные в объекте, возможно ли это сделать? Разве нет, есть еще один способ добиться результата быстрее? Заранее спасибо.

ответ

4

Вы можете использовать dynamic ExpandoObject, если она соответствует вашим потребностям:

dynamic user = new ExpandoObject(); 
user.name = Console.ReadLine(); 
Console.WriteLine("Insert surname: "); 
user.surname = Console.ReadLine(); 
User.add(user); 

Позже, вы можете также используйте базовый словарь для динамического доступа к свойствам:

var dict = (IDictionary<String, Object>)user; 
dict["name"] = "John"; 
Debug.WriteLine(dict["name"]); // Outputs John 
Debug.WriteLine(user.name); // Outputs John 
4

Вы можете использовать ExpandoObject, который является средним способом между словарем и объектом (на самом деле это объект, где вы можете динамически устанавливать свойства, которые хранятся в словаре поддержки).

dynamic u = new ExpandoObject(); 
u.name = "abc"; 

Вы можете даже пройти в u в методе в качестве словаря:

Method(u); 

private void Method(IDictionary<string, object> d) 
{ 
    string name = (string)d["name"]; 
} 
+0

Ум очень интересный, я этого не знал. Огромное спасибо! :) – IlDrugo

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