在C#中动态创建对象数组

时间:2015-04-28 14:05:16

标签: c# arrays object tuples

我需要动态地将参数和值添加到以下对象。到目前为止,我通过创建对象静态(硬编码),如下所示:

object parameters = new { Param1 = UserNumber, Param2 = "201403", Param3 = true };

然后在函数中,将其传递为:

Helper.create(parameters);

^这有效。

但是,有时我只需要传递一个,没有或超过这三个。金额可以动态变化,不一定是相同的,也可以是不同的顺序。因此,我无法静态保留变量Param1Param2Param3的名称。我也是,不要控制' create()'功能

我试过这个(以及更多):

List<Tuple<object, object>> tupleList = new List<Tuple<object, object>>();

tupleList.Add(new Tuple<object, object>("Number", UserNumber));
tupleList.Add(new Tuple<object, object>("Start", 201403));
tupleList.Add(new Tuple<object, object>("Show", true));

object tuptest = tupleList.Cast<object>().ToArray();

但是它将它创建为一个包含对象的数组。 当您在调试中一步一步地进行调试时,它们的显示方式与我需要的不同。

文档示例是:

Helper.create( new { Parameter1 = "Text", Parameter2 = 1000 } );

如何动态创建?

3 个答案:

答案 0 :(得分:2)

使用C:\Python34\Scripts\pip3.4.exe install pygame 或更具体的类型声明方法的签名。这将允许您将任何(或没有)数量的参数传递给方法,然后您可以在方法内迭代。

E.g:

params object[] args

public void Foo(params Tuple<object, object>[] args)

然后您使用var a = new Tuple<object, object>("Number", UserNumber); var b = tupleList.Add(new Tuple<object, object>("Start", 201403)); var c = tupleList.Add(new Tuple<object, object>("Show", true));

进行调用

答案 1 :(得分:1)

为什么不创建一个全新的特定类型?

public class UserParameters {
     public UserNumber Number { get; set; }
     public string Start { get; set; }
     public bool Show { get; set; }
}

这样,如果输入错误,就会出现编译时错误,还会编译时检查类型。您不必将通用object参数转换为任何类型,这非常容易出错。

此外,您可以动态添加或删除属性,因此您可以添加或删除参数。

create方法可以接受此对象,您可以这样调用它:

parent.create(new UserParameters() {
     Number = Session.UserNumber,
     Start = "201403",
     Show = true
});

null的任何属性都是您未通过或定义的参数。

答案 2 :(得分:1)

您可以创建一个ExpandoObject&amp;传递它来创建

var x = new ExpandoObject() as IDictionary<string, Object>;
            x.Add("Number", "UserNumber");
            x.Add("Start", 201403);
            x.Add("Show", true);
            Create(x);