2017-10-15 85 views
1

我有这个条件语句条件语句返回异常错误

loRecordFieldData = CType(IIf(loRecordsAttributeCollection.ContainsKey(loMappingObject.FieldID), _ 
        loRecordsAttributeCollection(loMappingObject.FieldID), Nothing) 

的问题是,当loRecordsAttributeCollection不包含FieldID其返回未找到,而不是什么异常错误的关键。

任何人都可以解释这一点,以及如何防止它?

谢谢

回答

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 
0

使用If代替。 IIF语法在vb.net中已过时