Y a-t-il une raison à cela? Je demande parce que si vous avez besoin d'utiliser beaucoup de caractères vides, vous vous retrouvez dans la même situation que lorsque vous utilisez beaucoup de chaînes vides.
Edit: La raison de cette utilisation était la suivante:
myString.Replace ('c', '')
Supprimez donc toutes les instances de 'c' de myString.
RemoveAll(this string s, params char[] toRemove)
? L'intention sera clairement communiquée et vous ne risquez pas de taper quoi que ce soit.""
crée un objet : Non, ce n'est pas le cas.Réponses:
Il n'y a pas de char vide. Le plus proche que vous pouvez obtenir est
'\0'
le caractère "null" Unicode. Étant donné que vous pouvez intégrer cela dans des littéraux de chaîne ou l'exprimer très facilement, pourquoi voudriez-vous un champ séparé pour cela? De même, les arguments "c'est facile à confondre""
et" "
" ne s'appliquent pas'\0'
.Si vous pouviez donner un exemple de l'endroit où vous souhaitez l'utiliser et pourquoi vous pensez que ce serait mieux, cela pourrait aider ...
la source
Int32.Zero
, l'utiliseriez-vous à la place du 0 littéral? Sinon, quelle est la différence ici?Un char, contrairement à une chaîne, est une chose discrète avec une taille fixe. Une chaîne est vraiment un conteneur de caractères.
Donc, Char.Empty n'a pas vraiment de sens dans ce contexte. Si vous avez un caractère, il n'est pas vide.
la source
Il n'y a pas de personnage vide. Il contient toujours quelque chose . Même '\ 0' est un caractère.
la source
Utilisation
Char.MinValue
qui fonctionne de la même manière que «\ 0». Mais attention ce n'est pas pareilString.Empty
.la source
Vous pouvez utiliser des caractères nullables .
la source
Si vous n'avez pas besoin de la chaîne entière, vous pouvez profiter de l'exécution retardée:
Vous pouvez même combiner plusieurs caractères ...
... et seuls les 7 premiers caractères seront évalués :)
EDIT: ou encore mieux:
et son utilisation:
la source
OK, ce n'est pas particulièrement élégant pour supprimer des lettres, car la méthode .Replace a une surcharge qui prend des paramètres de chaîne. Mais cela fonctionne pour supprimer les retours chariot, les sauts de ligne, les tabulations, etc. Cet exemple supprime les caractères de tabulation:
la source
la même raison qu'il n'y en a pas
int.Empty
. Les conteneurs peuvent être vides. Les valeurs scalaires ne peuvent pas l'être. Si vous voulez dire 0 (qui n'est pas vide), utilisez alors'\0'
. Si vous voulez direnull
, utiliseznull
:)la source
Un caractère est un type de valeur, sa valeur ne peut donc pas être nulle. (À moins qu'il ne soit emballé dans un contenant Nullable).
Puisqu'il ne peut pas être nul, in contient du code numérique et chaque code est mappé à un caractère.
la source
Pas une réponse à votre question, mais pour désigner une valeur par défaut,
char
vous pouvez utiliser simplementqui est le même que celui
char.MinValue
qui à son tour est le même que\0
. Il ne faut cependant pas utiliser if pour quelque chose comme une chaîne vide.la source
Ne répond pas à votre première question - mais pour le problème spécifique que vous avez rencontré, vous pouvez simplement utiliser des chaînes au lieu de caractères, non?:
Il y a une raison pour laquelle vous ne voudriez pas faire ça?
la source
Vous pouvez également reconstruire votre chaîne caractère par caractère, à l'exclusion des caractères dont vous souhaitez vous débarrasser.
Voici une méthode d'extension pour ce faire:
Ce n'est pas lisse ou sophistiqué, mais cela fonctionne bien.
Utilisez comme ceci:
la source
StringBuilder
forresult
. Pourquoi ne pas envelopperreturn s.Replace(charsToRemove,"");
?Si vous souhaitez supprimer des caractères qui remplissent une condition spécifique, vous pouvez utiliser ceci:
(Cela ne laissera que les caractères majuscules dans la chaîne.)
En d'autres termes, vous pouvez "utiliser" la chaîne comme
IEnumerable<char>
, y apporter des modifications, puis la reconvertir en chaîne comme indiqué ci-dessus.Encore une fois, cela permet non seulement de supprimer un char spécifique en raison de l'expression lambda, mais vous pouvez le faire si vous changez l'expression lambda comme ceci:
c => c != 't'
.la source
Que diriez-vous de BOM , le personnage magique que Microsoft ajoute au début des fichiers (au moins XML)?
la source
myString.Replace ('c', '')
pourrait être réalisé parmyString.Replace ('c', UTF_BOM)
. Alors je dirais que la réponse est "pourquoi pas ...".si vous souhaitez éliminer le caractère vide dans la chaîne, ce qui suit fonctionnera, convertissez-le simplement en n'importe quelle représentation de type de données que vous souhaitez. Merci,
la source
En termes de langage C #, les éléments suivants peuvent ne pas avoir beaucoup de sens. Et ce n'est pas une réponse directe à la question. Mais fowlloing est ce que j'ai fait dans l'un de mes scénarios d'entreprise
Le
null
etwhite space
avait des flux commerciaux différents dans mon projet. Lors de l'insertion dans la base de données, je dois insérerempty string
dans la base de données s'il s'agit d'un espace blanc.la source
Je sais que celui-ci est assez ancien, mais j'ai récemment rencontré un problème avec le fait de devoir faire plusieurs remplacements pour sécuriser un nom de fichier. Tout d'abord, dans la dernière chaîne .NET, la fonction de remplacement null est l'équivalent d'un caractère vide. Cela dit, ce qui manque dans .Net est un simple remplacement de tout ce qui remplacera n'importe quel caractère d'un tableau par le caractère souhaité. N'hésitez pas à faire référence au code ci-dessous (s'exécute dans LinqPad pour les tests).
la source
utilisation
la source
Le moyen le plus simple de supprimer un caractère de la chaîne est de le couper
cl = cl.Trim(' ');
Supprime tous les espaces d'une chaîne
la source