如何调用与C#集合初始化的方法?(How to call a method with the C#

2019-10-19 15:31发布

案件

今天早上,我重构一些记录方法,需要在正常的阵列,以改变方法的“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()没有先初始化数组?

Answer 1:

的问题是,C#试图推断阵列的类型。 不过,您提供不同类型的值,因此C#不能推断出类型。 无论是确保所有你值相同类型的,或者明确说明的类型,当你初始化数组

var first = new []{"string", "string2", "string3"};
var second = new object[]{0.0, 0, "string"};

一旦你停止使用PARAMS没有办法回来。 你将被迫初始化数组。

另类继续使用PARAMS:

public void Test([CallerMemberName]string callerMemberName = null, params object[] test2){}


文章来源: How to call a method with the C# collection initializer?