如何对可能为 null 的对象执行 ToString 操作?

2023-12-27

有没有一种简单的方法可以执行以下操作:

String s = myObj == null ? "" : myObj.ToString();

我知道我可以执行以下操作,但我确实认为这是一种黑客行为:

String s = "" + myObj;

如果 Convert.ToString() 有适当的重载,那就太好了。


C# 6.0 编辑:

使用 C# 6.0,我们现在可以拥有原始方法的简洁、免转换版本:

string s = myObj?.ToString() ?? "";

或者甚至使用插值:

string s = $"{myObj}";

原答案:

string s = (myObj ?? String.Empty).ToString();

or

string s = (myObjc ?? "").ToString()

更加简洁。

不幸的是,正如已经指出的那样,您通常需要在任一侧进行强制转换才能使其适用于非字符串或对象类型:

string s = (myObjc ?? (Object)"").ToString()
string s = ((Object)myObjc ?? "").ToString()

因此,虽然它可能看起来很优雅,但演员阵容几乎总是必要的,而且在实践中并不那么简洁。

正如其他地方所建议的,我建议也许使用扩展方法来使其更干净:

public static string ToStringNullSafe(this object value)
{
    return (value ?? string.Empty).ToString();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何对可能为 null 的对象执行 ToString 操作? 的相关文章

  • 将完整模板参数值映射到原始类型

    我想将数字映射到类型 在这个例子中 我将创建一个函数 将 sizeof 结果映射到有符号的原始类型 我想知道是否有更好的方法来完成我在现代 C 中所做的事情 即采用模板化值并将其转换为类型 现在 这可以将大小转换为已知类型 但我似乎无法在标
  • 运行需要 MySql.Data 的内置 .NET 应用程序

    我在运行我编写的内置 NET 应用程序时遇到问题 我的应用程序使用最新的 MySql 连接器 该连接器安装在我的系统上 当我尝试将其添加为引用时 该连接器显示为 NET 4 Framwork 组件 当我在环境中以调试模式运行应用程序时 一切
  • Gwan C#,如何获取HTTP标头?

    我需要它来重写 url 以了解我正在处理哪个友好的 url 用于用户代理和其他东西 EDIT public class Gwan MethodImplAttribute MethodImplOptions InternalCall exte
  • C# 5 async/await 线程机制感觉不对?

    为什么让调用线程进入异步方法直到内部 等待 一旦调用异步方法就生成一个线程 这不是更干净吗 这样您就可以确定异步方法会立即返回 您不必担心在异步方法的早期阶段没有做任何昂贵的事情 我倾向于知道某个方法是否要在 我的 线程上执行代码 不管是堵
  • 使用查询表达式对 List 进行排序

    我在使用 Linq 订购这样的结构时遇到问题 public class Person public int ID get set public List
  • 增强精神、递归和堆栈溢出

    为什么下面的代码在运行时崩溃 它会给出堆栈溢出错误 include
  • 将接口转换为其具体实现对象,反之亦然?

    在 C 中 当我有一个接口和几个具体实现时 我可以将接口强制转换为具体类型 还是将具体类型强制转换为接口 这种情况下的规则是什么 Java 和 C 中都允许这两个方向 向下转型需要显式转型 如果对象类型不正确 可能会抛出异常 然而 向上转换
  • 如何对 NServiceBus.Configure.WithWeb() 进行单元测试?

    我正在构建一个 WCF 服务 该服务接收外部 IP 上的请求并将其转换为通过 NServiceBus 发送的消息 我的单元测试之一调用Global Application Start 它执行应用程序的配置 然后尝试将 Web 服务解析为 验
  • 析构函数中的异步操作

    尝试在类析构函数中运行异步操作失败 这是代码 public class Executor public static void Main var c1 new Class1 c1 DoSomething public class Class
  • 英文日期差异

    接近重复 如何计算相对时间 https stackoverflow com questions 11 how do i calculate relative time 如何在 C 中计算某人的年龄 https stackoverflow c
  • 在 OpenGL 中渲染纹理 1 到 1

    所以我想做的是使用 OpenGL 和 C 将纹理渲染到平面上 作为显示图像的一种方式 但是我需要确保在渲染纹理时没有对纹理进行任何处理 抗锯齿 插值 平滑 模糊等 这是 OpenGL 处理渲染纹理的默认方式吗 或者是否需要设置一些标志才能禁
  • ASP.NET MVC 路由:如何从 URL 中省略“索引”

    我有一个名为 StuffController 的控制器 具有无参数索引操作 我希望从表单中的 URL 调用此操作mysite com stuff 我的控制器定义为 public class StuffController BaseContr
  • 如何调试 .NET 运行时中的内部错误?

    我正在尝试调试一些处理大文件的工作 代码本身works 但 NET 运行时本身会报告零星错误 对于上下文 这里的处理是一个 1 5GB 文件 仅加载到内存中一次 在循环中处理和释放 故意尝试重现此否则不可预测的错误 我的测试片段基本上是 t
  • 如何在 winforms 应用程序的主屏幕显示之前显示欢迎屏幕?

    我想在应用程序启动时加载欢迎屏幕 然后用户单击欢迎屏幕上的按钮 然后关闭欢迎屏幕 最后显示主屏幕 static void Main startup method being called Application EnableVisualSt
  • 需要提取字符串中点后的最后一个数字,如“7.8.9.1.5.1.100”

    我需要提取 C 字符串中最后一个点后面的最后一个数字 例如 7 8 9 1 5 1 100 并将其存储在整数中 Added 该字符串也可以是 7 8 9 1 5 1 1 或 7 8 9 1 5 1 0 我还想验证它在最后一个点之前恰好是 7
  • LINQ 中的“from..where”或“FirstOrDefault”

    传统上 当我尝试从数据库中获取用户的数据时 我使用了以下方法 在某种程度上 DbUsers curUser context DbUsers FirstOrDefault x gt x u LoginName id string name c
  • 使用 using 声明时,非限定名称查找如何工作?

    根据 C 标准 这是格式错误还是格式良好 namespace M struct i namespace N static int i 1 using M i using N i int main sizeof i Clang 拒绝它 GCC
  • 来自 3rd 方库的链接器错误 LNK2019

    我正在将旧的 vc 6 0 应用程序移植到 vs2005 我收到以下链接器错误 我花了几天时间试图找到解决方案 错误LNK2019 无法解析的外部符号 imp 创建AwnService 52 在函数 public int thiscall
  • 如何将 SQL“LIKE”与 LINQ to Entities 结合使用?

    我有一个文本框 允许用户指定搜索字符串 包括通配符 例如 Joh Johnson mit ack on 在使用 LINQ to Entities 之前 我有一个存储过程 该存储过程将该字符串作为参数并执行以下操作 SELECT FROM T
  • 使用未分配的局部变量

    我遇到了一个错误 尽管声明了变量 failturetext 和 userName 错误仍然出现 谁能帮帮我吗 Use of Unassigned local variable FailureText Use of Unassigned lo

随机推荐

  • 使用unitils/dbMaintain维护数据库,如何排除脚本运行?

    我正在使用unitils 及其dbMaintain模块 来维护本地数据库的状态 dbMaintain 有一个选项可以根据限定符排除 包含脚本 看http www dbmaintain org tutorial html Qualifier
  • 如何在首次加载时触发验证

    有没有办法在第一次加载时触发表单验证 我的表单从数据库加载数据 并且数据可能已经由用户部分填充 所以我想在第一次加载时运行验证以向用户显示他需要填充的内容以及多少 我之前没有提到 我需要在服务器端执行验证 而不是客户端 我使用的所有验证器也
  • 如何在 Symfony 4 中更新安全令牌中的角色而无需重新登录

    我正在尝试在用户确认其电话号码后更新用户的角色 我在数据库中进行更新 user gt setRoles ROLE USER em gt persist user 这工作正常并更新用户在数据库中的角色 之前 用户拥有 ROLE UNACTIV
  • 从不同文件导入类时,Python 3 是否会出现意外行为?

    我正在尝试从一个文件导入一个类 并检查定义它的文件中是否是该类的实例 问题是 而不是返回True来自isinstance 函数 它返回False 因为它是在不同的文件中初始化的 这是一个工作示例 说你有file1 py class Foo
  • onCreate中LinearLayout高度为0

    我正在尝试根据 屏幕高度 我的布局高度 list size 动态调整行的高度 不幸的是在onCreate方法布局高度返回 null 当我在单击侦听器中调用它时并非如此 还有其他方法可以调用它吗 你必须等到布局发生 这是之后onCreate
  • 如何使用 shell 脚本提取 xml 属性?

    我已经使用 grep 从源文档中提取了标签 但是现在我似乎无法弄清楚如何轻松地从字符串中提取属性 另外 我想避免使用标准安装中通常不存在的任何程序 tag img src http imgs xkcd com comics barrel c
  • 在 iPhone 应用程序中使用 XML-RPC

    是否可以在 iPhone 应用程序中使用 XML RPC 调用 什么方法最好 XML RPC 有什么限制吗 谢谢你 保罗 我最近遇到了这个库 看看最后的描述 希望你觉得它有用 https github com eczarny xmlrpc
  • jQuery 动画向前跳转?

    有没有办法及时向前 向后跳跃 jQuery 动画 例如 如果我将某个元素的动画设置为 10 秒 我可以跳到 5 秒 进入该动画吗 优选地 这可以用百分比来设置 您可以停止当前动画 将动画对象的状态设置为初始状态和最终状态之间的中间状态 然后
  • 当给出日期时,如何在 php 中获取该周星期一的日期[重复]

    这个问题在这里已经有答案了 可能的重复 用 PHP 获取一周的第一天 https stackoverflow com questions 1897727 get first day of week in php 当给出日期时 我应该得到该周
  • 在排序和旋转的数组中搜索

    在准备面试时 我偶然发现了一个有趣的问题 您已获得一个已排序然后旋转的数组 例如 Let arr 1 2 3 4 5 已排序 向右旋转两次即可得到 4 5 1 2 3 现在如何最好地在这个排序 旋转的数组中进行搜索 人们可以取消旋转数组 然
  • libnids 样本中从未调用过 tcp_callback

    我正在研究从 pcap 文件中提取 http 数据 我必须重新组装片段 所以我找到了nids lib 我在 Mac os 10 9 5 64 位中使用自制程序安装 libnids 1 24 我尝试运行打印全部样本 http libnids
  • 图片下载后回调函数

    我正在尝试使用以下命令保存图像下载request https github com mikeal request模块 有了这个 request http google com images logos ps logo2 png pipe f
  • Firebase Android 重新连接最多需要 45 分钟

    在某些设备 下面给出的列表 上 Firebase 在重新获得互联网连接后始终需要 20 到 45 分钟才能重新连接 有什么办法可以加快速度吗 我首先认为问题出在 info connected事件侦听器没有被触发 但后来我意识到 如果有一些待
  • 无法在 AngularJS 版本的 SmartAdmin 模板中使用迷你图

    我已经使用 SmarrAdmin 模板启动了一个 angularjs 种子项目 我想在这样的视图中创建迷你图 div class sparkline 50 40 70 div 但图表没有显示 我看到的只是 50 40 70 创建种子角度项目
  • 如何让Android Studio通过Windows防火墙连接到互联网?

    我启用了 Windows 防火墙并启用了入站和出站规则 在 android studio 中 我在 gradle 同步等时收到 连接到互联网被拒绝 错误 已经允许 studio exe 在防火墙中连接 但它不起作用 如果我禁用防火墙 它就可
  • 在 shell 脚本中将换行符附加到输出文件

    我有一个正在 Cygwin 中执行的 shell 脚本 也许这就是问题所在 对于这段代码 我只想编写第一行 并附加一个换行符 echo date User whoami started the script gt gt output log
  • PHPMyAdmin 不导入 unicode

    当我使用 PHPMyAdmin 的导入功能时 它不会导入非 ASCII 字符 例如 以及字符后的其余单词 当我用记事本打开 CSV 文件时 它通常显示非 ASCII 字符 但当我尝试导入它时 它不起作用 手动输入这些缺失的字符是可行的 My
  • 交易范围类似功能

    我希望设置与事务范围非常相似的东西 它在服务上创建一个版本 并将在范围结束时删除 提交 在事务范围内运行的每个 SQL 语句都会在内部查看某些连接池 事务存储 以确定其是否在范围内并做出适当的反应 调用者不需要将事务传递给每个调用 我正在寻
  • 如何使用 TypeScript 将多个参数传递给 Angular 中的 @Directives (@Components)?

    自从我创建了 Directive as SelectableDirective 我有点困惑 关于如何通过超过一个自定义指令的值 我进行了很多搜索 但没有得到正确的解决方案Angular with 打字稿 这是我的示例代码 父组件为MCQCo
  • 如何对可能为 null 的对象执行 ToString 操作?

    有没有一种简单的方法可以执行以下操作 String s myObj null myObj ToString 我知道我可以执行以下操作 但我确实认为这是一种黑客行为 String s myObj 如果 Convert ToString 有适当