Skip to main content
 首页 » 编程设计

c#之如何使用 C# 集合初始值设定项调用方法

2024年02月13日29傻小

案例

今天早上我重构了一些 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){}