Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置标志后跳过代码行_C# - Fatal编程技术网

C# 设置标志后跳过代码行

C# 设置标志后跳过代码行,c#,C#,我有一个相当大的程序(C#),需要通过添加关闭日志的选项来扩展其功能。程序将目录位置作为参数,在其中存储日志。如果args[0]为空,我希望它不记录任何内容。现在,该程序有如下嵌套行: DiagnosticLog.WriteLine("\t\t----Verifying Plugins were installed correctly----"); 我的第一个想法是在该函数中创建并检查全局标志,如果没有设置,则运行该行。这样我就可以避免在代码中的每一行使用相同的if语句。有没有更聪明的方法可以

我有一个相当大的程序(C#),需要通过添加关闭日志的选项来扩展其功能。程序将目录位置作为参数,在其中存储日志。如果args[0]为空,我希望它不记录任何内容。现在,该程序有如下嵌套行:

DiagnosticLog.WriteLine("\t\t----Verifying Plugins were installed correctly----");

我的第一个想法是在该函数中创建并检查全局标志,如果没有设置,则运行该行。这样我就可以避免在代码中的每一行使用相同的if语句。有没有更聪明的方法可以在运行时“关闭”这些行?

您可以实现一个版本的
DiagnosticLog
,它实际上不记录任何内容,如果您不想记录,可以使用它代替您的记录版本。这是假设您在创建
DiagnosticLog
实例时知道是否要进行日志记录(我按照您的要求收集了该实例)。

为什么不调用一个日志函数来检查参数是否为空

public void WriteLine(string log) {
    if (!firstArgIsEmpty) {
        // Print to file.
    }
}

如何修改
DiagnosticLog.WriteLine
函数以获取第二个参数
doactuall
bool
),该参数的默认值为
true
?对
DiagnosticLog
进行一些非常细微的修改,以考虑此值。然后,您可以在实例化
DiagnosticLog
时决定是否要进行实际的日志记录。

您只需在
DiagnosticLog
中添加一个
启用的
标志,默认情况下该标志为
。如果args[0]为空,请调用
DiagnosticLog.Disable()
将其设置为
false
。然后在
WriteLine
和任何其他日志记录功能中,在执行实际日志记录之前,检查
已启用。

您可以创建一个属性

public bool Log { get; set; }

string logFilePath;
public string LogFilePath
{
    get { return logFilePath; }
    set 
    {
        logFilePath = ValidateLogFilePath(value);
        Log = logFilePath.Length > 0;
    }            
}

public void WriteLine(string line)
{
    if (!Log)
        return;
    //...
}
如果创建一个布尔属性来指示是否正在进行日志记录,那么您还可以使用它跳过在没有进行日志记录时不需要的代码的其他部分。如果您只是为了日志目的而构建任何长字符串,这可能会很有用

if (DiagnosticLog.Log)
{
    DiagnosticLog.WriteLine("The following plugins were not installed:\r\n\t" +
          string.Join("\r\n\t", GetMissingPluginNames()));
}

将System.Diagnostics.TraceListener类与System.Diagnostics.TraceSwitch结合使用如何?你似乎要做的功能已经被烘烤了。

这实际上是与C++有关的吗?因为我的代码是用C写的,并不意味着它不能被C++的人所回答。这两个问题都可以解决。事实上,它也可以用c来解决。重新标记到
c#
-标记的全部目的是将您的问题定位到正确的受众,请尽量保持它们的适当性。它也可以用python来解决,但这个问题与您的c#代码有关。。