向对象添加值的最佳方法是?

时间:2016-04-19 08:39:34

标签: c#

我正在寻找填充对象属性的最佳方法。情况就是这样:

我需要将一个对象发送到一个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..

你怎么看这种方式,在我看来有点长。我想避免使用字典并直接推送对象中的数据,这可能吗?不是,还有另一种方法可以更快地实现结果吗?提前谢谢。

2 个答案:

答案 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