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

标签 c# .net parameters collection-initializer

案例

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

相关文章:

.net - Sharepoint CMS 与 UmbracoCMS

php - 使用对象属性作为方法属性的默认值

c - 字符串作为函数参数并从 C 中的函数返回字符串

c# - 单击一次相同的发布版本但程序集版本不同,更新不会发生

c# - 如何在 C# 中获取列表中新添加项的索引?

C# 在窗体中执行方法

c# - 在什么情况下编译器会生成额外的 C# 代码?

c# - 将嵌套在动态对象中的 C# 列表中的第一项和最后一项序列化为 JSON

c# - 我应该如何在管道中引用 IHttpModule 实例?

c++ - 未知数量的函数参数 c++