2010-10-04 11 views
0

Bonjour, J'ai un projet qui a été créé dans une version antérieure à la version 3.5. J'ai ensuite exécuté l'assistant pour le mettre à niveau vers 3.5. Après que j'ai fait ceci j'ai construit le projet mais il a une erreur. L'erreur est qu'un Guid tente d'accéder aux propriétés HasValue et Valeur:Mise à jour du projet vers Framework 3.5

if(theGuid.HasValue) 
{ 
    id = theGuid.Value 
} 

Les erreurs sont « System.GUID » ne contient pas de définition pour « HasValue » et aucune méthode d'extension « HasValue » accepter une première l'argument de type 'System.Guid' peut être trouvé (manque-t-il une directive using ou une référence d'assembly?)

L'erreur est similaire pour la propriété Value.

Quelqu'un peut-il me dire ce qui se passe? Est-ce une propriété qui a été retirée du cadre? Si oui, que puis-je le remplacer par?

Merci!

+2

Pouvez-vous nous montrer où theGuid est défini/initialisé? –

Répondre

1

On dirait que « theGuid » aurait dû être défini comme:

Guid? theGuid; 

Et maintenant, pour une raison quelconque, il n'utilise pas Nullable<T> dans sa définition, et est plutôt définie comme:

Guid theGuid; 
+0

Merci, c'est le cas. J'ai vérifié le contrôle de source qui contient avant la conversion et c'est un type nullable. Après la conversion, il semble que beaucoup de types nullables sont devenus non-nulles. Je ne sais pas pourquoi cela aurait dû arriver. –

+0

@Mr Cricket: Cela ne devrait pas vraiment se produire dans le cadre de la conversion. C'est un problème de conversion assez étrange. –

1

Les types nulles sont toujours possibles dans 3.5.

Etes-vous sûr que theGuid est un type Guid? et pas seulement Guid?

1

HasValue et Value sont les propriétés de la structure Nullable<T>.

donc votre code devrait fonctionner si theGuid a été déclarée comme nullableGuid:

Guid? theGuid = //... 
Guid id; 

if (theGuid.HasValue) 
{ 
    id = theGuid.Value; 
}