gpt4 book ai didi

c# - 异常的三元运算符?其他选择?

转载 作者:行者123 更新时间:2023-11-30 15:42:05 25 4
gpt4 key购买 nike

假设我们有一个 Person 类型的给定对象,并希望将其 Name 属性存储到局部变量中,同时避免在对象为 null 时可能出现的异常,我们可以这样做:

string personName = null;

if (person != null)
{
personName = person.Name;
}

但是,必须在 if 语句的范围之外声明变量并将其初始化为默认值有点麻烦。相反,我们可以使用条件三元运算符这样写:

string personName = person != null ? person.Name : null;

处理 try-catch 语句时也存在同样的问题。假设我们正在尝试查找 TcpClient 的远程地址。我们可能会这样做:

string remoteAddress = null;

try
{
remoteAddress = tcpClient.Client.RemoteEndPoint.ToString();
}
catch (SocketException e)
{
Console.WriteLine(e.Message);

return;
}

但是,据我所知,没有定义用于简化此类事情的运算符,考虑到可能的复杂性,我认为这是有充分理由的。不过我想知道,有没有办法让这种事情更简洁?也许涉及 monad 的解决方案可行,或者这段代码应该保持原样。

最佳答案

我个人的猜测是这样的运算符不适用于异常,因为它可能会助长不良的编码习惯。记住以下最佳实践指南:

  1. 代码不应静默失败
  2. 只有在特殊情况下才会抛出异常

由于这些要点,您不应该需要经常处理异常(TryParse 等方法在这里有很大帮助),除了应用程序的顶级 UI 级别,您可以在其中捕获并记录所有内容。

在您的示例中,如果 TCP 连接断开,算法通常无论如何都无法继续,所以为什么不让套接字异常冒泡到 UI 层,在那里捕获它并向用户显示一条有用的消息(“连接丢失,请检查您的互联网连接。{Exception Details}"),而不是仅仅返回并在控制台静默记录一些东西,让用户想知道为什么他的操作没有完成?

关于c# - 异常的三元运算符?其他选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7782962/

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