【问题标题】:How to check the result length of where如何检查 where 的结果长度
【发布时间】:2017-08-11 06:05:38
【问题描述】:
 List<object> _list = new List<object>();

 public object Get => _list.Where( x => x.GetType() == typeof( int ) ).First();

Where的长度为零时,使用上面的代码会导致System.InvalidOperationException

 public object Get2
 {
     get
     {
         var where = _list.Where( x => x.GetType() == typeof( int ) );
         if( 0 < where.Count() )
         {
             return where.First();
         }
         return null;
     }
 }

所以我用它来解决这个问题,但是有没有办法让代码更干净?

【问题讨论】:

  • FirstOrDefault?
  • 列表是否需要持有对象?
  • 使用FirstOrDefault() 而不是First()。因为,First() 返回序列的第一个元素,它返回序列的第一个元素。FirstOrDefault () 在表中没有元素时不会抛出异常。

标签: c#


【解决方案1】:

FirstOrDefault 将是您正在寻找的东西:

public object Get => _list.FirstOrDefault( x => x.GetType() == typeof(int))

当您面对First() 时,如果集合是null,则提高NullReferenceException,而FirstOrDefault 将为您提供默认值,以防没有任何选择。

Here你可以找到比较.FirstFirstOrDefault的线程并描述你需要使用它们的场景

【讨论】:

  • 感谢您的快速回复。感谢您的帮助。
  • @Lim: 很乐意随时为您提供帮助!
【解决方案2】:

当没有匹配到时,使用FirstOrDefault 获取null 作为返回值。

public object Get => _list.FirstOrDefault( x => x.GetType() == typeof( int ) );

【讨论】:

    【解决方案3】:

    而不是First()

     public object Get => _list.Where( x => x.GetType() == typeof( int ) ).First();
    

    使用FirstOrDefault()

    public object Get => _list.Where( x => x.GetType() == typeof( int ) ).FirstOrDefault();
    

    【讨论】:

      【解决方案4】:

      使用FirstOrDefault() 代替First()。因为,First() 返回序列的第一个元素,它返回序列的第一个元素。 FirstOrDefault () 在表中没有元素时不会抛出异常。

      public object Get => _list.Where( x => x.GetType() == typeof( int ) ).FirstOrDefault ();
      

      【讨论】:

        【解决方案5】:

        FirstOrDefault:返回序列的第一个元素,如果没有找到元素,则返回默认值。抛出异常:仅当源为空时。在以下情况下使用:当预期有多个元素并且您只需要第一个元素时。

        【讨论】:

          猜你喜欢
          • 2021-10-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-29
          • 1970-01-01
          • 2014-03-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多