2012-07-02 44 views
0
private static void print(StreamWriter sw, string mlog, bool screen) 
    { 
     DateTime ts = DateTime.Now; 
     sw.WriteLine(ts + " " + mlog); 
     if (screen == true) 
     { 
      Console.WriteLine(mlog); 
     } 
    } 

我会用print (sw,"write here", false)来调用。 90%的机会我会使用虚假的。如何使它成为默认情况下是错误的,当我打电话时我不需要额外的类型?C#默认值

+1

有时它最好有明确的方法,例如PrintToStream()和PrintToStreamAndScreen() –

回答

7

如果您正在使用C#4,你可以让screenoptional parameter

// Note: changed method and parameter names to be nicer 
private static void Print(StreamWriter writer, string log, bool screen = false) 
{ 
    // Note: logs should almost always use UTC rather than the system local 
    // time zone 
    DateTime now = DateTime.UtcNow; 

    // TODO: Determine what format you want to write your timestamps in. 
    sw.WriteLine(CultureInfo.InvariantCulture, 
       "{0:yyyy-MM-dd'T'HH:mm:ss.fff}: {1}", now, log); 
    if (screen) 
    { 
     Console.WriteLine(mlog); 
    } 
} 
+0

我已经将更多的我的代码使用DateTimeOffset而不是UTC日期时间..我发现它稍后转换/知道“适当”的本地时间更容易混淆。这里并不一定相关,但很少有人似乎知道这一点。 – 2012-07-02 19:02:53

+0

@pst:我建议你转换成使用野田时间,它是更清晰的开始:) –

+0

哈哈,谢谢。我不知道那里是否有.NET这样的库。 – 2012-07-02 19:04:14

1

只需使用= false

private static void print(StreamWriter sw, string mlog, bool screen = false) 

这里有Named and Optional Arguments in C#多一点信息。

请注意,这是C#4.0中的新功能。对于旧版本,请按照其他人的建议使用方法重载。

1
private static void print(StreamWriter sw, string mlog) 
{ 
    print(sw, mlog, false); 
} 
1

对于老版本,你可以简单地提供2所覆盖:

private static void print(StreamWriter sw, string mlog) 
{ 
print(sw,mlog, false); 
} 
1

如果你不是活得t使用C#4,创建函数过载:

private static void Print(StreamWriter writer, string log) 
{ 
    Print(writer, log, false); 
} 
1

涉及可选参数的答案将有效,但有些语言不支持可选参数,因此它们无法从面向公众的API调用此方法。

我将与方法重载去..

private static void print(StreamWriter sw, string mlog) { 
    print(sw, mlog, false); 
} 

private static void print(StreamWriter sw, string mlog, bool screen) { ... }

+0

没错,还有一个很好的原则。然而,这种情况是一种“私人”方式,所以我认为你不需要考虑这一点。 –

+0

@TimS。在这种情况下同意。如果要成为公共方法,他们可能会考虑超载。 –

1
private static void print(StreamWriter sw, string mlog = "Write here", bool screen = false) 
    { 
     DateTime ts = DateTime.Now; 
     sw.WriteLine(ts + " " + mlog); 
     if (screen == true) 
     { 
      Console.WriteLine(mlog); 
     } 
    }