我真的不喜欢调用String.IsNullOrEmpty(str)。这使我需要首先考虑“String”类,然后在对象“str”上调用它。
我喜欢调用str.IsNullOrEmpty(),这不需要我想“String”类。
问题是扩展方法接受null实例来调用,这在调用普通方法时不常见。
我的问题您认为接受null的扩展方法的会话名称是什么?
对于字符串,这很容易,“IsNullOrEmpty()”(包含“IsNull”的任何内容)对我来说听起来不错。
对于其他人,比如GetDisplayName(),我们将其命名为“NullOrGetDisplayName”吗?
答案 0 :(得分:2)
首先,你的想法是错误的,你应该调整它。想到在null对象上调用方法是不正确的;事实上,这就是为什么你想看看它是否为空的原因!
其次,方法意味着它在它拥有的参数中接受null。我不认为这里的命名约定是合适的。您可以通过Spec#来消除类中的null。
答案 1 :(得分:1)
NullSafeGetDisplayName
或GetDisplayNameNullSafe
怎么样,表明即使被调用的对象是null
也可以安全地调用?
答案 2 :(得分:1)
对于可以查询“null”对象的方法,我会选择mystring.IsNullOrEmpty()
- 显然检查字符串是否为空,只要你在整个代码库中与命名一致,就没有人会有任何理解/学习它意味着什么的麻烦。
对于将某些东西应用于对象并忽略空对象的方法,我使用“安全”,如SafeGetDisplayName()
中所述 - 这是一个常用的长期标准(参见MFC中的GetSafeHandle())< / p>
答案 3 :(得分:1)
我只是不明白你的思维方式。写一些类似nullObject.IsNullOrWhatever()的东西根本没有任何意义。您可能喜欢或不喜欢静态表单,但您的解决方案对我来说确实是错误的。
答案 4 :(得分:0)
Nullable
类有一个名为GetValueOrDefault
的方法。相同的表单可用于某些扩展方法:GetDisplayNameOrDefault
或更具体的GetDisplayNameOrNull
或GetDisplayNameOrEmpty
。