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?