如何使用Environment.NewLine作为可选参数默认值

时间:2018-12-18 20:53:22

标签: c# optional-parameters compile-time-constant

即使该项目仅适用于Windows,我还是尽可能地选择Environment.NewLine胜过"\r\n"。我想知道是否有一种方法可以将其用作可选参数的默认值。

考虑扩展方法

public static string ToSummaryString<T>(
    this IEnumerable<T> items, 
    string delimiter = Environment.NewLine)

和编译时错误

  

“定界符”的默认参数值必须为编译时常量

我也尝试过使用参数属性,命运也很相似

public static string ToSummaryString<T>(
    this IEnumerable<T> items, 
    [Optional, DefaultParameterValue(Environment.NewLine)] string delimiter)
  

属性参数必须是属性参数类型的常量表达式,typeof表达式或数组创建表达式

那么有什么解决方法吗?还是我唯一的选择将其硬编码为"\r\n"还是要求它?

2 个答案:

答案 0 :(得分:0)

您可以用Null替换默认值,然后在方法内部使用null-coalescing operator。像这样:

public static string ToSummaryString<T>(this IEnumerable<T> items, string delimiter = null)
{
    var realDelimiter = delimiter ?? Environment.NewLine;
}

您也可以使用Method-Overloading,如@Dennis_E所述:编写2种方法;一个带有定界符,另一个没有定界符。

答案 1 :(得分:0)

在我看来,最好的方法是将默认值设置为null,然后在方法中检查该值。如果参数为null,则将默认值设置为“ \ r \ n”。更好的是,将该默认值放在资源文件中,以便您可以根据需要进行更改,而不必重新编译应用程序。 (当然,将值放在配置文件中也可以)