[英]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) {
...
}
或者(对于任意indexAt
和valueToTest
):
if (responseSerialNumber.Length >= indexAt + 1 &&
responseSerialNumber[indexAt] == valueToTest) {
...
}
在一般情况下(当responseSerialNumber
为IEnumerable<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.