我厌倦了写作:
if(objectA!=null)
return;
Run Code Online (Sandbox Code Playgroud)
要么:
if(objectB==null)
return;
Run Code Online (Sandbox Code Playgroud)
所以我希望缩短这个片段,如下所示:
Returns.IfNull(objectA);
Run Code Online (Sandbox Code Playgroud)
它与相同的长度非常匹配,但通常很少有对象可以检查和添加,params因为参数可以缩短:
if(objectA==null || objectB!=null || objectC!=null)
return;
Run Code Online (Sandbox Code Playgroud)
至:
Returns.IfNull(objectA,objectB,objectC);
Run Code Online (Sandbox Code Playgroud)
基本上,函数IfNull必须在堆栈跟踪中获得更高一级的功能并完成它.但这只是一个想法,我不知道它是否可能.我可以在某些lib中找到相似的逻辑吗?
不,你基本上要求函数退出比自身更高的函数,这是不可取的,也不是真的可能,除非你抛出一个异常(它本身不返回).
因此,您可以执行简单而简洁的if-null-return检查,或者您可能想要执行的操作是抛出定义良好的异常,但我不建议流控制的异常.但是,如果这些是异常(错误)情况,则考虑抛出ArgumentNullException()并在适当时处理它.
您可以编写一些帮助方法来为您抛出ArgumentNullException(),当然,为了清理它:
public static class ArgumentHelper
{
public static void VerifyNotNull(object theObject)
{
if (theObject == null)
{
throw new ArgumentNullException();
}
}
public static void VerifyNotNull(params object[] theObjects)
{
if (theObjects.Any(o => o == null))
{
throw new ArgumentNullException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
public void SomeMethod(object obj1, object obj2, object obj3)
{
ArgumentHelper.VerifyNotNull(obj1, obj2, obj3);
// if we get here we are good!
}
Run Code Online (Sandbox Code Playgroud)
但是再一次,这是异常,而不是堆栈中前一个方法的"返回",这是不可能直接实现的.
| 归档时间: |
|
| 查看次数: |
141 次 |
| 最近记录: |