Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在C中动态创建对象数组#_C#_Arrays_Object_Tuples - Fatal编程技术网

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

C# 在C中动态创建对象数组#,c#,arrays,object,tuples,C#,Arrays,Object,Tuples,我需要动态地向以下对象添加参数和值。到目前为止,我通过如下方式创建对象,以静态方式(硬编码)实现: object parameters = new { Param1 = UserNumber, Param2 = "201403", Param3 = true }; 然后在函数中,将其传递为: Helper.create(parameters); ^这很有效 但是,有时候我只需要通过一个,一个,或者超过三个。金额可以动态变化,不一定命名相同,也可以以不同的顺序命名。因此,我不能静态地保留变量P

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

object parameters = new { Param1 = UserNumber, Param2 = "201403", Param3 = true };
然后在函数中,将其传递为:

Helper.create(parameters);
^这很有效

但是,有时候我只需要通过一个,一个,或者超过三个。金额可以动态变化,不一定命名相同,也可以以不同的顺序命名。因此,我不能静态地保留变量
Param1
Param2
Param3
的名称。我还不控制“
create()
”函数的行为

我试过这个(还有更多):


我如何动态地创建它

使用
params object[]args
或更具体的类型声明方法的签名。这将允许您向该方法传递任意(或无)数量的参数,然后您可以在该方法内部进行迭代

例如:

公共void Foo(参数元组[]args)

var a=新元组(“Number”,UserNumber);
var b=tupleList.Add(新元组(“开始”,201403));
var c=tupleList.Add(新元组(“Show”,true));

然后使用
Foo(a,b,c)调用它

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

public class UserParameters {
     public UserNumber Number { get; set; }
     public string Start { get; set; }
     public bool Show { get; set; }
}
这样,如果输入错误,就会出现编译时错误,并且还会进行编译时类型检查。您不必将泛型
对象
参数强制转换为任何类型,这非常容易出错

此外,您还可以动态添加或删除属性,因此在某种程度上可以添加或删除参数

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

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

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

您可以创建一个ExpandoObject并将其传递给create

var x = new ExpandoObject() as IDictionary<string, Object>;
            x.Add("Number", "UserNumber");
            x.Add("Start", 201403);
            x.Add("Show", true);
            Create(x);
var x=newexpandoobject()作为IDictionary;
x、 添加(“编号”、“用户编号”);
x、 添加(“开始”,201403);
x、 添加(“显示”,真实);
创建(x);

什么是
create
期望收到的?您可以控制create方法吗?如果是这样的话,可以通过字典来代替。这个问题很不清楚。请尝试编辑它,以便其他人,然后你自己可以理解它编辑解释更多这是行不通的。我不知道之前的参数名称或类型。这是正确的方向。我现在在一个数组中有3个对象。但它会创建不同类型的对象。我添加了
x=x.Cast().ToArray()但我仍然有3件物品。似乎它只在数组中查找一行。
public class UserParameters {
     public UserNumber Number { get; set; }
     public string Start { get; set; }
     public bool Show { get; set; }
}
parent.create(new UserParameters() {
     Number = Session.UserNumber,
     Start = "201403",
     Show = true
});
var x = new ExpandoObject() as IDictionary<string, Object>;
            x.Add("Number", "UserNumber");
            x.Add("Start", 201403);
            x.Add("Show", true);
            Create(x);