EventArgs可以为null吗? - c#

我的某些代码中有protected override void OnFormClosing(FormClosingEventArgs e),并且代码分析给出了CA1062,因为我不检查e是否为null。

约定EventArgs永远不应为null;这就是为什么我们有EventArgs.Empty。当然,我可能很愚蠢,在引发某些事件时会传递null而不是EventArgs.Empty,但是这里是一些自动生成的代码将引发FormClosing事件,因此我只是取消了警告。

是否有一些极端情况可能导致EventArgs由框架为null而不是由程序员引起?

参考方案

简短的回答:是的,您可以这样做:

public void DoSomething()
{
    OnFormClosing(null);
}

但是,除非您实际执行此类操作,否则可以忽略该警告。

查看Form类的源代码,我们可以找到this method,它会恢复为:

    /// <devdoc>
    ///    <para>Raises the FormClosing event for this form when Application.Exit is called.
    ///          Returns e.Cancel returned by the event handler.</para>
    /// </devdoc>
    internal bool RaiseFormClosingOnAppExit() {
        FormClosingEventArgs e = new FormClosingEventArgs(CloseReason.ApplicationExitCall, false);
        OnFormClosing(e);
        return e.Cancel;
    }

因此,当WinForms引发事件时,e不可能为null。

将谓词<T>转换为Func <T,bool> - c#

我有一个包含成员Predicate的类,希望在Linq表达式中使用该类:using System.Linq; class MyClass { public bool DoAllHaveSomeProperty() { return m_instrumentList.All(m_filterExpression); } private IEnumerable&…

从JAVA调用方法C#.NET - java

我有一个C#.NET项目中创建的dll,我想从Java程序中调用方法。我想知道是否存在实现此目标的机会,然后遇到了JNA和JNI。我应该使用哪一个?有什么建议么?我只需要在使用C#.NET编写的类中调用方法并处理Java程序的结果即可。 参考方案 这取决于您的应用程序,但是您可以将C#DLL放在服务中,例如WCF并以这种方式将功能公开给Java代码。使用ws…

Java中的“ <<”运算符 - java

最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…

通过Maven编译器插件不会发生有限的包含和排除 - java

我正在使用3.6.0版的maven编译器插件,在此我们只想在特定文件夹中编译一个文件,而在该位置编译所有其他文件。例如:在文件夹应用程序中有14个文件,从那我只希望编译1个文件,但它编译了所有文件,如果我要排除,则它也不起作用。 <sourceDirectory>${basedir}/../src/java</sourceDirectory…

.NET XPathNavigator找不到XPath查询中指定的元素(但是XPath查询在XMLSpy中有效) - c#

我有以下C#代码段,用于使用XPath在正在输入的XML文件中查找错误:string xml; // the XML is passed as a parameter as the string below using (Stream messageStream = new MemoryStream(xml)) { IXPathNavigable sourc…