【问题标题】:Optional argument followed by Params [duplicate]可选参数后跟 Params [重复]
【发布时间】:2012-09-26 15:51:45
【问题描述】:

所以我看到可以有一个方法签名,其中第一个参数提供默认值,第二个参数是 params 集合。

我看不到的是一种实际使用第一个参数的默认值的方法。

有可能吗?

示例方法:

void WaitAllTasks(string message = "Running Task.WaitAll", params Task[] tasks);

我最初尝试在调用方法时省略 message 参数,还尝试使用命名参数,这不适用于 params。

它可以编译,但是可以使用它吗?

【问题讨论】:

    标签: c# params optional-parameters


    【解决方案1】:

    我可以找到三种调用方法的方式,而无需为第一个参数指定值:

    using System;
    
    class Test
    {
        static void PrintValues(string title = "Default",
                                params int[] values)
        {
            Console.WriteLine("{0}: {1}", title, 
                              string.Join(", ", values));
        }
    
        static void Main()
        {
            // Explicitly specify the argument name and build the array
            PrintValues(values: new int[] { 10, 20 });
            // Explicitly specify the argument name and provide a single value
            PrintValues(values: 10);
            // No arguments: default the title, empty array
            PrintValues();
        }
    }
    

    我还没有找到一种在不显式构建数组的情况下指定多个值的方法...

    【讨论】:

    • @Servy:不,反射需要您指定所有参数。
    • 奇怪的是,C# 编译器不允许使用values: {10,20}values:(10,20)。我搜索了很多,看来你的方式是最好的方式。
    • 我明白为什么这种限制是必要的,但有点不幸,尤其是新的呼叫者信息属性。我希望能够在我的日志记录包装器上定义一个方法void Info(string message, [CallerMemberName] string memberName = "", [CallerLineNumber] int lineNumber = 0, params object[] args)
    • @DanBryant:是的,我看得出来这很痛苦 :(
    猜你喜欢
    • 2019-08-16
    • 2013-02-13
    • 1970-01-01
    • 2013-02-14
    • 2013-07-04
    • 2021-03-25
    相关资源
    最近更新 更多