2017-10-15 3 views
1

J'ai cette déclaration conditionnelleDéclaration conditionnelle renvoie Exception Erreur

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

le problème est quand loRecordsAttributeCollection ne contient pas la clé d'erreur FieldID il renvoie d'exception non trouvé au lieu de rien.

Quelqu'un pourrait-il expliquer cela et comment l'éviter?

Merci

Répondre

2

IIf est une fonction, de sorte que tous ses arguments seront évalués avant qu'il ne soit appelé. Utilisez If à la place, ce qui est une véritable ligne conditionnelle et ne sera pas évaluer l'opérande qui n'est pas retourné:

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

Si cela est un dictionnaire, vous pouvez également utiliser TryGetValue ou l'envelopper dans une méthode d'extension:

Dim loRecordFieldData As … ' the value type of loRecordsAttributeCollection 

loRecordsAttributeCollection.TryGetValue(loMappingObject.FieldID, loRecordFieldData) 

' now cast 
0

Utilisez If à la place. La syntaxe IIf est obsolète dans vb.net