繁体   English   中英

如何检查属性 elementAt() 是否有值且不为空

[英]How to check the property elementAt() has a value and its not null

有时,我正在检查的元素不存在,应用程序会抛出错误。

if(responseSerialNumber.ElementAt(1) == 0)
{
    //Do the following
}  

我该如何处理?

有两种方法可以解决这个问题。
首先,在访问之前检查数组是否有足够的元素:

if(responseSerialNumber.Length > 2 && responseSerialNumber.ElementAt(1) == 0)
{
    //Do the following
}

第二种方法是使用ElementAtOrDefault() ,它根据数组的类型返回适当的默认值。

var item = responseSerialNumber.ElementAtOrDefault(1);
if (item != default(byte)) { // or use "(item != null)" if item is an reference type
   //Do the following
}

注意:如果您有一组非值类型(在这种情况下,它们可以将 null 作为默认值),则第二个解决方案可以正常工作。 如果您有字节数组,请坚持使用第一个解决方案。

如果responseSerialNumber是一个数组byte[] (见评论),你可以检查数组:首先是它的Length然后是value

if (responseSerialNumber.Length >= 2 && responseSerialNumber[1] == 0) {
  ...
}    

或者(对于任意indexAtvalueToTest ):

if (responseSerialNumber.Length >= indexAt + 1 &&
    responseSerialNumber[indexAt] == valueToTest) {
  ...
}

一般情况下(当responseSerialNumberIEnumerable<T> )对于给定

int indexAt = 1;
valueToTest = 0;

我们可以Skip indexAt项目并检查下一个:

if (responseSerialNumber.Skip(indexAt).Take(1).Any(item => item == valueToTest)) {
  // responseSerialNumber has at least indexAt items
  // indexAt's items is equal to valueToTest
}

甚至

if (responseSerialNumber.Where(index, value) => 
      index == indexAt && value == valueToTest)) {
  ...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM