2016-03-03 4 views
0

Lors de la mise à niveau du code vb.net de Visual Studio 2008 vers Visual Studio 2015, j'obtiens un 'Integer' non déclaré. Il peut être inaccessible en raison de son niveau de protection. erreur sur le code suivant:vb.net Les crochets carrés provoquent une erreur lors de la mise à niveau vers Visual Studio 2015

[Integer].TryParse(...) 

L'erreur se produit également sur un code similaire avec [Date] .TryParse. Le framework cible pour le code original et mis à niveau est .NET Framework 3.5. La mise à niveau du framework cible n'a pas d'importance. Si je supprime les crochets, le code compile. Est-ce que quelqu'un sait pourquoi cette syntaxe fonctionne dans Visual Studio 2008 mais pas Visual Studio 2015?

+2

Les crochets ne coûtent pas nécessaire sauf si vous utilisez capricieusement que comme un nom d'une variable ou une propriété – Plutonix

+2

Il est probablement une bizarrerie qui n'a pas été traduit vers le compilateur Roslyn. Vous pouvez simplement supprimer les crochets, ils ne sont pas nécessaires si vous faites référence à la classe. – Blorgbeard

+1

Je ne vois pas pourquoi ces crochets seraient là en premier lieu. Le but des parenthèses est d'indiquer au compilateur que vous voulez utiliser un mot-clé comme identifiant. Dans ce cas, vous appelez un membre 'Shared' d'un type, donc vous voulez spécifiquement que' Integer' ou 'Date' soit interprété comme un mot-clé, c'est-à-dire leurs types intrinsèques. Vous verrez parfois cela fait avec 'String' mais cela fonctionne parce que' String' est un type .NET. 'Integer' et' Date' ne sont pas des types .NET. Les types .NET qui correspondent à ces types intrinsèques sont 'Int32' et' DateTime'. – jmcilhinney

Répondre

1

Comme @Plutonix @Blorgbeard et @jmcilhinney ont tous répondu dans les commentaires, vous devez supprimer les crochets. Converti à la communauté wiki in line with this meta post recommandation, à supprimer de la section «Unanswered».

@ jmcilhinney

Le point de crochets tout est d'indiquer au compilateur que vous souhaitez utiliser un mot-clé comme identifiant. Dans ce cas, vous appelez un membre partagé d'un type afin que vous souhaitiez spécifiquement que Integer ou Date soient interprétés comme un mot clé, c'est-à-dire leurs types intrinsèques. Vous verrez parfois cela fait avec String mais cela fonctionne parce que String est un type .NET. Entier et Date ne sont pas des types .NET. Les types .NET qui correspondent à ces types intrinsèques sont Int32 et DateTime