我需要动态地将参数和值添加到以下对象。到目前为止,我通过创建对象静态(硬编码),如下所示:
object parameters = new { Param1 = UserNumber, Param2 = "201403", Param3 = true };
然后在函数中,将其传递为:
Helper.create(parameters);
^这有效。
但是,有时我只需要传递一个,没有或超过这三个。金额可以动态变化,不一定是相同的,也可以是不同的顺序。因此,我无法静态保留变量Param1
,Param2
和Param3
的名称。我也是,不要控制' 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 } );
如何动态创建?
答案 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);