我有这个条件陈述
loRecordFieldData = CType(IIf(loRecordsAttributeCollection.ContainsKey(loMappingObject.FieldID), _
loRecordsAttributeCollection(loMappingObject.FieldID), Nothing)
问题是当loRecordsAttributeCollection没有包含FieldID时,它返回异常错误密钥而不是找不到。
有人可以解释这个以及如何预防吗?
谢谢
答案 0 :(得分:2)
IIf
是一个函数,因此它的所有参数都将在调用之前进行求值。请改用If
,这是一个真正的内联条件,不会评估未返回的操作数:
loRecordFieldData = CType(If(loRecordsAttributeCollection.ContainsKey(loMappingObject.FieldID), _
loRecordsAttributeCollection(loMappingObject.FieldID), Nothing)
如果这是字典,您也可以使用TryGetValue
或将其包装在扩展方法中:
Dim loRecordFieldData As … ' the value type of loRecordsAttributeCollection
loRecordsAttributeCollection.TryGetValue(loMappingObject.FieldID, loRecordFieldData)
' now cast
答案 1 :(得分:0)
使用If代替。 IIf语法在vb.net中已经过时了