我正在寻找填充对象属性的最佳方法。情况就是这样:
我需要将一个对象发送到一个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属性:
object data = new{
name = user["name"],
surname = user["surname"]
};
User.add(data); //Send the user to add to rest resource..
你怎么看这种方式,在我看来有点长。我想避免使用字典并直接推送对象中的数据,这可能吗?不是,还有另一种方法可以更快地实现结果吗?提前谢谢。
答案 0 :(得分:4)
您可以使用ExpandoObject
这是字典和对象之间的中间路径(实际上它是一个可以动态设置存储在支持字典中的属性的对象)。
dynamic u = new ExpandoObject();
u.name = "abc";
您甚至可以在方法中将u
作为字典传递:
Method(u);
private void Method(IDictionary<string, object> d)
{
string name = (string)d["name"];
}
答案 1 :(得分: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