【问题标题】:check whether any one of the object is null and proceed with other检查任何一个对象是否为空并继续其他
【发布时间】:2020-06-21 22:52:47
【问题描述】:

我在课堂上有一个像下面这样的列表

public class DesignHubProject{
   public List<ProjectObject<HydronicSystem>> HydronicSystems { get; set; }
}

这是ProjectObject&lt;HydronicSystem&gt;持有的对象

public class ProjectObject<T>
{
    public Guid? Id { get; set; }
    public T OriginalObject { get; set; }
    public T ModifiedObject { get; set; }
}

现在我需要查找修改后的对象是否为空,我需要继续处理原始对象,或者如果它不为空,则使用修改后的对象。

为此,我正在循环遍历对象,如下所示

    foreach(var item in designHubProject.HydronicSystems)
    {
           // here i need to check for modified object is null proceed with original object and 
            // if original object is null proceed with modified object           
    }

我如何检查对象是否继续进行,任何人都可以提出任何想法,非常感谢我。

提前致谢。

【问题讨论】:

  • 你试过什么?那段代码做了什么?这和你想要的有什么不同?最重要的是,具体是什么让您难以弄清楚?请阅读How to Ask,了解有关如何以清晰、可回答的方式提出好问题的信息。
  • 您的措辞令人困惑“我需要查找修改后的对象是否为空,我需要继续处理原始对象,反之亦然。”,您能否澄清一下。如果modified 不为空,为什么不直接使用 modified ,你为什么要在事后检查 original 是否为空?
  • 这是事实,如果修改后的对象为空,我可以使用原始对象。如果修改后的对象不为空,我可以使用修改后的自身
  • 你可以通过if(item.OriginalObject == null)查看

标签: c# .net list generics c#-6.0


【解决方案1】:

一种方法是使用Extension method(对代码重用有用):

public static class ProjectObjectExtension
{
    public static T GetObject<T>(this ProjectObject<T> projectObject)
        => projectObject.ModifiedObject ?? projectObject.OriginalObject;

    // or like @MichaelRandall suggests in his answer
    public static T GetObjectMichaelRandallWay<T>(this ProjectObject<T> projectObject)
        => EqualityComparer<T>.Default.Equals(projectObject.ModifiedObject, default) ?
            projectObject.OriginalObject :
            projectObject.ModifiedObject;
}

然后调用这个方法:

foreach(var item in designHubProject.HydronicSystems)
{
    var obj = item.GetObject();
    // rest of your code...
}

或者只是在你的循环中调用这个代码:

foreach(var item in designHubProject.HydronicSystems)
{
    var obj = item.ModifiedObject ?? item.OriginalObject;
    // rest of your code...
}

您也可以使用 LINQ .Select() 方法:

foreach(var obj in designHubProject.HydronicSystems.Select(p => p.ModifiedObject ?? p.OriginalObject))
{
    // rest of your code...
}

【讨论】:

  • 哈哈 GetObjectMichaelRandallWay :) 你会得到一个点。只是为了完整性EqualityComparer&lt;T&gt;.Default.Equals(obj, default) 避免拳击尊重IEquatable&lt;T&gt; 以及object.Equals,并处理 nullable
猜你喜欢
  • 1970-01-01
  • 2022-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多