C# 围绕 x 代码进行空检查的模块化方法

标签 c# linq null

我有一个函数,它返回一个打开的表单,如果尚未打开,则返回 null。

  • 如果表单打开,我想执行一项操作(例如刷新其列表)。
  • 如果它没有打开,并且函数返回null,我不想做任何事情。

无需复制粘贴相同代码即可包装此功能的模块化方法是什么?

当前代码:

private void Sample()
{
    var desiredForm = MasterForm.FindForm<FormType1>();
    if (desiredForm != null)
        desiredForm.DoAction1();

    var otherForm = MasterForm.FindForm<FormType2>();
    if (otherForm != null)
        otherForm.DoAction1(someParam);

}

所需代码:

private void Sample()
{
    MasterForm.FindForm<FormType1>().DoAction1();
    MasterForm.FindForm<FormType2>().DoAction1(someParam);
}

但我不确定如何绕过空值检查。任何其他简写也会有所帮助。

尝试失败:

private void Sample()
{
    // initialization of the new forms would fail because they lack all parameters
    (MasterForm.FindForm<FormType1>() ?? new FormType1()).DoAction1();
    (MasterForm.FindForm<FormType2>() ?? new FormType2()).DoAction1(someParam);
}

最佳答案

使用 C# 6 你应该能够做到这一点:

private void Sample()
{
    // initialization of the new forms would fail because they lack all parameters
    MasterForm.FindForm<FormType1>()?.DoAction1();
    MasterForm.FindForm<FormType2>()?.DoAction1(someParam);
}

它的 (?.) 称为“空条件”运算符,请参阅文档 here

关于C# 围绕 x 代码进行空检查的模块化方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44729139/

相关文章:

c# - 除非使用嵌套使用 block ,否则 Visual Studio 无法解析类名

c# - Migradoc 添加水平线

c# - 如何从 LINQ 实现 SQL CASE 语句

c# - 反转字典中的键和值

c# - 如果值为字符串类型则按片段搜索,但如果值为 int 则按整个搜索

MySQL:没有匹配行时的 AVG

c# - 如何在 asp.net 按钮的文本左侧制作图像?

Javascript:测试至少一个非空数组(如果其中一个数组可能为空)

c - '\0' evaluates false, "\0"评估为真

c# - Sonar-CSharp 不分析 .cs 文件