如何使用C#集合初始值设定项调用方法
本文关键字:调用 方法 何使用 集合 | 更新日期: 2023-09-27 17:52:16
案例
今天早上,我重构了一些Logging方法,需要更改普通数组中方法的params参数。因此,对该方法的调用必须随数组参数而改变。我希望方法调用的更改尽可能少,因为它是一个使用频繁的实用程序方法。
我以为我应该能够使用集合初始值设定项来调用该方法,但它给了我一个编译错误。请参阅下面示例中的第二个调用。第三次调用也可以,但也会导致错误。
示例
void Main()
{
// This works.
object[] t1 = { 1, "A", 2d };
Test(t1);
// This does not work. Syntax error: Invalid expression term '{'.
Test({1, "A", 2d });
// This does not work. Syntax error: No best type found for implicitly-typed array.
Test(new[] { 1, "A", 2d });
// This works.
Test(new object[] { 1, "A", 2d });
}
void Test(object[] test)
{
Console.WriteLine(test);
}
问题
- 有没有任何方法可以在不首先初始化数组的情况下调用
Test()
问题是C#正在尝试推断数组的类型。但是,您提供了不同类型的值,因此C#无法推断类型。要么确保所有值都是相同的类型,要么在初始化数组时明确说明类型
var first = new []{"string", "string2", "string3"};
var second = new object[]{0.0, 0, "string"};
一旦你停止使用params,就没有回头路了。您将被迫初始化一个数组。
可选继续使用参数:
public void Test([CallerMemberName]string callerMemberName = null, params object[] test2){}