c# – 在层次结构中更高的完成功能

我厌倦了写作:
if(objectA!=null) 
return;

要么:

if(objectB==null) 
return;

所以我希望缩短这个片段,如下所示:

Returns.IfNull(objectA);

它与相同的长度非常匹配,但通常很少有对象可以检查和添加参数,因为参数可以缩短:

if(objectA==null || objectB!=null || objectC!=null) 
return;

至:

Returns.IfNull(objectA,objectB,objectC);

基本上函数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();
            }
        }
    }

然后你可以写:

public void SomeMethod(object obj1,object obj2,object obj3)
{
    ArgumentHelper.VerifyNotNull(obj1,obj2,obj3);

    // if we get here we are good!
}

但是再一次,这是异常,而不是堆栈中前一个方法的“返回”,这是不可能直接实现的.

相关文章

目录简介使用JS互操作使用ClipLazor库创建项目使用方法简单测...
目录简介快速入门安装 NuGet 包实体类User数据库类DbFactory...
本文实现一个简单的配置类,原理比较简单,适用于一些小型项...
C#中Description特性主要用于枚举和属性,方法比较简单,记录...
[TOC] # 原理简介 本文参考[C#/WPF/WinForm/程序实现软件开机...
目录简介获取 HTML 文档解析 HTML 文档测试补充:使用 CSS 选...