我需要创建一个接受null作为参数的函数,并安全地返回null而没有异常。
MyObject CreateMyObject(string objectName)
{
if(objectName == null)
return null;
// create and return object otherwise
}
在程序周围有数千个函数调用,在调用CreateMyObject之前检查空值会增加代码量和开发时间。在程序的后续阶段安全地忽略此函数返回的空值。
这种功能的适当名称是什么,因此调用者的功能显而易见?
答案 0 :(得分:4)
LINQ扩展方法,如果没有匹配则不会抛出异常,并附加OrDefault
。
因此,您也可以遵循此约定并将方法标识符更改为CreateMyObjectOrDefault
。
或者,实际上,作为@RB。在对此答案的一些评论中建议,因为MyObject
是引用类型,您只需将方法称为CreateMyObjectOrNull
。
为什么不将此方法转换为扩展方法:
public static class ObjectExtensions
{
public static MyObject CreateMyObject(this string name)
{
Contract.Requires(!string.IsNullOrEmpty(name));
// create and return object otherwise
}
}
...当你打电话时,你会使用新的闪亮的null-conditional operator吗?
string text = "whatever";
// This is equivalent to your approach and you're using regular C#
// syntax and you don't need to re-invent the wheel ;)
MyObject myObject = text?.CreateMyObject();
另外,请详细了解code contracts以了解Contract.Requires
发生了什么。