Y a-t-il un moyen d'utiliser isnullorempty code> avec des types nullables? Le code ci-dessus génère une erreur de construction lors de l'utilisation de isnullorempty code> avec string? Rundate code>
4 Réponses :
Il doit être String? Rundate = null code> cette ligne. Vous n'avez pas besoin de déclarer la chaîne comme type nullable type String? Code> car String code> est un type de référence et par défaut sur null code>. Il peut simplement être
L'opérateur Le Supprimer le ? code> est utilisé pour déclarer des types non nullables comme nullables, et le compilateur les compile à être de type nullable system.string code> est un type de référence est donc nullable. P>
? code> L'opérateur et les choses doivent fonctionner. P>
@Avimeltser c'est pas i> redondant. Ce n'est pas un fait. Pour que cela soit redondant, il faudrait que ce soit équivalent à ne pas le faire, et ce n'est pas le cas, car il est erroné, de sorte que fait i> contre elle.
On dirait que vous avez l'intention d'utiliser Le but de Essayez de réécrire votre code comme celui-ci: P> ? code> comme dans TypeScript dans lequel elle implique une valeur optionnelle; Mais ce n'est pas le cas en C #. En C #, la syntaxe code> t? Code> sténographie pour nullable nullable t code> tel t code> doit également être une structure. system.string code> est un class code> et non a struct code>, il ne peut donc pas être utilisé avec nullable nullable t code> ou null code>, puisque struct Les valeurs basées ne peuvent pas être des références nuls elles-mêmes. Toutes les valeurs basées sur la classe code> peuvent déjà contenir des références nulles, de sorte qu'il n'a pas de sens de les utiliser avec nullable public int MyMethod(string RunDate = null)
{
string sql = string.Empty;
int rowsChanged = -1;
if (String.IsNullOrEmpty(RunDate))
{
//do stuff
}
}
Réponse rapide, non.
Réponse plus longue, pas encore. P>
À l'heure actuelle, avant que ce # 8 soit libéré (puits aussi longtemps que vous n'utilisez pas l'aperçu C # 8), Le symbole en d'autres termes, jusqu'à ce que c # 8 est libéré, ou vous commencez à utiliser l'aperçu C # 8, vous ne pouvez rien faire, sauf supprimer le point d'interrogation. P> Que se passe-t-il lorsque c # 8 est libéré? p> Eh bien, donc dans ce cas, ? code> Lorsqu'il est utilisé pour spécifier des types de référence nullables, est une erreur de syntaxe. Ignorons c # 8 pour le moment étant. P> type? Code> est traduit en nullable nullable t code> ne peut pas être string code>, donc ceci, chaîne? code> n'est pas légal. C'est ce qui vous donne l'erreur de syntaxe. P>
type? code> pour Types de référence em> ne sera pas strong> Traduire NULLLABLE T CODE> avec des connaissances sur la nullabilité. Pour les champs, les propriétés, les paramètres, les types de retour, essentiellement tout ce qui n'est pas une variable locale, cela se traduira par une déclaration avec un attribut indiquant la nullabilité. Pour les variables locales, le compilateur gardera une trace de la nullabilité. P> string.isnullorempty code> fonctionnera en fait car le paramètre sera toujours fondamentalement une chaîne, elle juste être une chaîne avec la connaissance de la nullabilité attachée à elle. p> p>
Maintenant, cela sera-t-il pris en charge par Visual Studio 2010? Non, ce ne sera pas. Vous pourriez être capable de tromper le compilateur à l'aide de la bonne version, mais Intellisense sera bouchée et que vous ne pouvez rien faire à ce sujet à l'exception de la mise à niveau.
Sauf si vous utilisez actuellement l'aperçu C # 8,
? Code> n'est pas légal à utiliser avec des types de référence. N'a rien à voir avec isnullorempty.? code> est strictement autorisé à être utilisé avec des types de valeur avant c # 8.@ Lassevågsætherkarlsen Je paierais de voir que c # 8 Aperçu fonctionnel sur VS 2010, selon les balises :)
Eh bien, les gens intelligents ont déjà piraté le studio Visual Studio, je ne les aurais pas déjà passé.
Est-ce que quelqu'un sait pourquoi on m'a donné 2 bowvotes?