案例
今天早上我重构了一些 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"};
一旦停止使用参数,就无法返回。您将被迫初始化一个数组。
替代继续使用参数:
public void Test([CallerMemberName]string callerMemberName = null, params object[] test2){}
关于c# - 如何使用 C# 集合初始值设定项调用方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22605955/