c# - 将数组传递给采用参数 object[] 或 IEnumerable<T> 的函数

标签 c# arrays string overloading enumerable

我想将一个自定义对象数组传递给类似 String.Join 的函数具有以下签名:

  • public static string Join(string separator, params Object[] values)
  • public static string Join(string separator, IEnumerable<T> values)

如果我这样调用函数:

var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join("\n", arr);

我得到一个编译器错误:

The call is ambiguous between the following methods or properties: 'string.Join(string, params object[])' and 'string.Join(string, System.Collections.Generic.IEnumerable)'

我可以使用 IEnumerable<T> 解决歧义功能:

var arr = new MyClass[]{ new MyClass(), new MyClass() };
string text = string.Join<MyClass>("\n", arr);

但是我可以调用params object[]吗?功能?

我正在使用 C# 4.0,如果这有什么不同的话。

最佳答案

如果您传递 object[] 作为第二个参数,编译器应该选择 object[] 重载,因为它完全匹配。如果您有不同类型的数组(在本例中为 MyClass[]),只需将数组转换为 object[]:

string.Join("\n", (object[])arr);

您实际上并没有在运行时更改任何对象的类型或执行任何转换,您只是向编译器提示要使用哪个重载。

关于您对性能的评论,如果性能至关重要,请不要忘记对这两个选项进行基准测试。不要假设一个比另一个快。 (并且始终分析您的整个应用程序——任何瓶颈都可能出现在其他地方。)

关于c# - 将数组传递给采用参数 object[] 或 IEnumerable<T> 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15933632/

相关文章:

c# - Unity3d:从 C# 对象执行任意 javascript

c# - 多媒体内容的处理程序 (MIME) 不起作用

c# - 使用可移植类库作为 COM 接口(interface)

c# - 如何在 asp.net core 中遍历 MemoryCache?

javascript - React中map函数的数组

c - 为什么打印字符串时出现段错误(核心转储)?

c# - 在字符串数组中打印出特定字符出现次数最多的字符串

c# - 如何用另一个文件中的字符替换一个文件中的字符

javascript - 无法访问javascript数组中的项目

java - 在java中创建十六进制字节数组