C# 将对象作为对象数组传递
我有一个接受对象数组作为参数的常用方法 现在,在一些实例中,我只需要将单个对象传递给函数调用。为了节省代码行和内存,我尝试以内联方式进行:C# 将对象作为对象数组传递,c#,arrays,C#,Arrays,我有一个接受对象数组作为参数的常用方法 现在,在一些实例中,我只需要将单个对象传递给函数调用。为了节省代码行和内存,我尝试以内联方式进行: func(new ObjectType(param)); 但这不会编译,因为它需要一个对象数组。如何将此对象转换为函数调用中的数组?(它是否需要另一个构造函数或运算符重载?我假设函数签名是func(object[]items) 很少有选择: 创建新数组:func(new[]{new ObjectType(param)}) 添加采用单个参数的新重载:fun
func(new ObjectType(param));
但这不会编译,因为它需要一个对象数组。如何将此对象转换为函数调用中的数组?(它是否需要另一个构造函数或运算符重载?我假设函数签名是
func(object[]items)
很少有选择:
- 创建新数组:
func(new[]{new ObjectType(param)})
- 添加采用单个参数的新重载:
func(对象项)
- 将签名更改为:
。这将需要一个数组或零个以上的对象(例如func(参数对象[]项)
)func(item1、item2、item3)
func(对象[]项)
很少有选择:
- 创建新数组:
func(new[]{new ObjectType(param)})
- 添加采用单个参数的新重载:
func(对象项)
- 将签名更改为:
。这将需要一个数组或零个以上的对象(例如func(参数对象[]项)
)func(item1、item2、item3)
params
关键字:
private void MyFunc(params string[] args)
{
foreach(string s in args)
{
Console.WriteLine(s);
}
}
像这样测试它
MyFunc("foo"); // pass single string
MyFunc(new string[] {"foo", "bar"}); // pass array
老实说,如果传递单个字符串,编译器将生成代码,用单个元素创建一个新数组。这不应该是一个问题,除非函数对性能非常关键。使用
参数关键字:
private void MyFunc(params string[] args)
{
foreach(string s in args)
{
Console.WriteLine(s);
}
}
像这样测试它
MyFunc("foo"); // pass single string
MyFunc(new string[] {"foo", "bar"}); // pass array
老实说,如果传递单个字符串,编译器将生成代码,用单个元素创建一个新数组。这应该不是问题,除非函数的性能非常关键。新建对象[]{Object\u i\u want\u in_array}
?或者类似的?或者重写函数,只取一个?新对象[]{Object_i_want_in_array}
?或者类似的?或者重写函数以只取一个?对于第一个选项,我已经重写了默认构造函数。所以我想这是行不通的。第三个选项看起来不错,我不确定构造器和它有什么关系。您可能需要发布更多的代码来澄清什么是func
,以及它的声明位置。在c#@Jcl上有多个构造函数签名并没有错。这并没有错,但我想这也需要我明确定义一个默认构造函数。“这是我不想说的。”萨沙姆我不明白你的意思。如果您有类(对象a)
和类(对象[]a)
您可以使用任一签名创建新类。在Class
中,如果需要,可以进行构造函数链接。对于第一个选项,我已经覆盖了默认构造函数。所以我想这是行不通的。第三个选项看起来不错,我不确定构造器和它有什么关系。您可能需要发布更多的代码来澄清什么是func
,以及它的声明位置。在c#@Jcl上有多个构造函数签名并没有错。这并没有错,但我想这也需要我明确定义一个默认构造函数。“这是我不想说的。”萨沙姆我不明白你的意思。如果您有类(对象a)
和类(对象[]a)
您可以使用任一签名创建新类。在类中
如果需要,可以进行构造函数链接。