gpt4 book ai didi

c# - 比 Try Catch 疯狂更好的选择?

转载 作者:太空狗 更新时间:2023-10-29 23:12:09 29 4
gpt4 key购买 nike

在下面的代码中,是否有更好的替代方法来替代疯狂的 try catch?我正在收集各种类似的系统信息,并且有更多这些烦人的 try-catch 结构,非常想摆脱它们。

请注意,这实际上是有道理的。并非 try block 中的所有进程信息都可以检索到,无论如何,不​​可用的信息只是可选的,同时跳过可用的信息是 Not Acceptable ,因此为什么不只有一个 try catch 对。

要是那些 try catch 语句可以进入 Append() 方法就好了。

foreach (Process proc in Process.GetProcesses())
{
try { Append(proc.Threads.Count); } catch { }
try { Append(proc.Id); } catch { }
try { Append(proc.ProcessName); } catch { }
try { Append(proc.BasePriority); } catch { }
try { Append(proc.StartTime); } catch { }

Append(proc.HandleCount,
proc.PrivateMemorySize64,
proc.NonpagedSystemMemorySize64,
proc.PagedMemorySize64,
proc.PeakPagedMemorySize64,
proc.PeakVirtualMemorySize64);
}

最佳答案

在我看来,您的方法总体上是错误的,但它会奏效。您可以使用一种方法“优化”它的可读性:

private void AppendSafe<T>(Func<T> f)
{
T val;

try
{
val = f();
}
catch { return; }

Append(val);
}

AppendSafe(() => proc.Threads.Count);
AppendSafe(() => proc.Id);
AppendSafe(() => proc.ProcessName);
AppendSafe(() => proc.BasePriority);
AppendSafe(() => proc.StartTime);

但我会争辩说要捕获相关的异常。您不希望 NullReferenceException 被忽视。

此外,由于异常代价高昂,因此最好弄清楚哪些属性在哪些平台上可用并对此进行测试。至少您会在频繁调用时将性能影响降至最低。

关于c# - 比 Try Catch 疯狂更好的选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56889751/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com