【问题标题】:Testing a C# Function Pointer (Delegate) for Null为 Null 测试 C# 函数指针(委托)
【发布时间】:2009-02-12 13:39:34
【问题描述】:

我正在 C# DLL 中测试一个名为 ErrorLoggingMethod 的函数指针,以防止由于 null 值引起的异常,如下所示,但似乎在运行时,当我真的要测试其委托是否为 null 时,该函数实际上正在执行.结果我无意中得到了一个空异常——这正是我想要避免的!我的初衷是帮助程序员以防他们忘记设置该委托。在这种情况下,我想提供一个虚拟功能。如果这不起作用,我如何检查委托是否为空?

udt.DatabaseConnectionString = InteractiveDatabaseConnection.AddSQLConnection(udt.ErrorLoggingMethod != null ? udt.ErrorLoggingMethod : CMAC_DummyErrorLoggingMethod);

【问题讨论】:

  • 能否提供一下ErrorLoggingMethod的类型?

标签: c# function null delegates


【解决方案1】:

您确定不会因为udt 是null 而得到异常吗?您没有在上面的代码中调用任何函数,而是将委托传递给方法AddSQLConnection。

【讨论】:

    【解决方案2】:

    我可能不明白您在问什么,但是...如果您想知道委托在其调用列表中是否有任何方法,您只需检查列表的长度...

    if (ErrorLoggingMethod.GetInvocationList().Length(0) == 0){
        //Add your default handler to the delegate
    }
    

    然后运行您的 AddSQLConnection 方法...

    【讨论】:

    • JPunyon,因为我的代表可能有很多订阅者,所以您的回答似乎是最合适的。另外我刚刚注意到,在我的原始代码中,当我真正打算调用方法时,我省略了 : 运算符的真假两面的参数。我很惊讶它竟然被编译了!
    • 我的错误:我以为我没有为传递给我的 AddSQLConnection 函数的函数委托提供参数列表,并认为 C# 编译器错误地接受了它……实际上,AddSQLConnection 需要一个函数委托本身,所以我编码正确; C# 编译器很好;)
    猜你喜欢
    • 2012-01-30
    • 2011-04-11
    • 1970-01-01
    • 2010-09-28
    • 2012-11-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 2012-12-29
    相关资源
    最近更新 更多