将IEnumerable <int>初始化为可选参数

JF *_*ier 7 c# ienumerable

我的IEnumerable<int>C#方法中有一个可选的类型参数.我可以用任何东西来初始化它null,例如固定的值列表吗?

Ily*_*nov 10

不可以.您只能编译时间常数.您可以指定为null然后

void SomeMethod(IEnumerable<int> list = null)
{
    if(list == null)
        list = new List<int>{1,2,3};
}
Run Code Online (Sandbox Code Playgroud)

下一个代码片段来自着名的C# in Depth书籍Jon Skeet.他建议使用null作为not set参数的一种指标,它可能具有有意义的默认值.

static void AppendTimestamp(string filename,
                            string message,
                            Encoding encoding = null,
                            DateTime? timestamp = null)
{
     Encoding realEncoding = encoding ?? Encoding.UTF8;
     DateTime realTimestamp = timestamp ?? DateTime.Now;
     using (TextWriter writer = new StreamWriter(filename, true, realEncoding))
     {
         writer.WriteLine("{0:s}: {1}", realTimestamp, message);
     }
}
Run Code Online (Sandbox Code Playgroud)

用法

AppendTimestamp("utf8.txt", "First message");
AppendTimestamp("ascii.txt", "ASCII", Encoding.ASCII);
AppendTimestamp("utf8.txt", "Message in the future", null, new DateTime(2030, 1, 1));
Run Code Online (Sandbox Code Playgroud)