C# 如何在没有 bool 的情况下执行 Try Catch Finally 来释放资源?
C# How do I do a Try Catch Finally without a bool to free up resources?
我正在尝试执行 try-catch-finally,这样如果 mainLog 已成功创建,但之后抛出异常,它将被正确处理。但是,如果 mainLog 未 成功创建并且存在 mainLog.Dipose()
方法调用,则会出现 另一个异常 。通常,我会做一个 if 语句,但 DocX.Create()
不会 return 布尔值,所以我不确定该怎么做。谢谢。
public static string Check_If_Main_Log_Exists_Silent()
{
DocX mainLog;
string fileName = DateTime.Now.ToString("MM-dd-yy") + ".docx";
string filePath = @"D:\Data\Main_Logs\";
string totalFilePath = filePath + fileName;
if (File.Exists(totalFilePath))
{
return totalFilePath;
}
else if (Directory.Exists(filePath))
{
try
{
mainLog = DocX.Create(totalFilePath);
mainLog.Save();
mainLog.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("The directory exists but the log does not exist and could not be created. " + ex.Message, "Log file error");
return null;
}
}
else
{
try
{
mainLog = DocX.Create(totalFilePath);
mainLog.Save();
mainLog.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("The directory and log does not exist and could not be created. " + ex.Message, "Log file error");
return null;
}
finally
{
if(mainLog)
}
}
}
在一般情况下,您默认将 mainLog
设置为 null
,并且仅在它不为 null 时才调用该方法。在 C# 6 中,您可以使用方便的形式:
mainLog?.Dispose();
对于旧版本,一个简单的 if:
if (mainLog != null)
mainLog.Dispose();
如果对象实现了 IDisposable
接口,那么使用 using
是最简单的方法,如 Gaspa79 的答案所示。
添加 using statement 仅当它在代码块末尾为 null 时才会调用 dispose。它是那些方便的语法糖之一。
我正在尝试执行 try-catch-finally,这样如果 mainLog 已成功创建,但之后抛出异常,它将被正确处理。但是,如果 mainLog 未 成功创建并且存在 mainLog.Dipose()
方法调用,则会出现 另一个异常 。通常,我会做一个 if 语句,但 DocX.Create()
不会 return 布尔值,所以我不确定该怎么做。谢谢。
public static string Check_If_Main_Log_Exists_Silent()
{
DocX mainLog;
string fileName = DateTime.Now.ToString("MM-dd-yy") + ".docx";
string filePath = @"D:\Data\Main_Logs\";
string totalFilePath = filePath + fileName;
if (File.Exists(totalFilePath))
{
return totalFilePath;
}
else if (Directory.Exists(filePath))
{
try
{
mainLog = DocX.Create(totalFilePath);
mainLog.Save();
mainLog.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("The directory exists but the log does not exist and could not be created. " + ex.Message, "Log file error");
return null;
}
}
else
{
try
{
mainLog = DocX.Create(totalFilePath);
mainLog.Save();
mainLog.Dispose();
}
catch (Exception ex)
{
MessageBox.Show("The directory and log does not exist and could not be created. " + ex.Message, "Log file error");
return null;
}
finally
{
if(mainLog)
}
}
}
在一般情况下,您默认将 mainLog
设置为 null
,并且仅在它不为 null 时才调用该方法。在 C# 6 中,您可以使用方便的形式:
mainLog?.Dispose();
对于旧版本,一个简单的 if:
if (mainLog != null)
mainLog.Dispose();
如果对象实现了 IDisposable
接口,那么使用 using
是最简单的方法,如 Gaspa79 的答案所示。
添加 using statement 仅当它在代码块末尾为 null 时才会调用 dispose。它是那些方便的语法糖之一。