J'aimerais énumérer un string
et au lieu de le renvoyer chars
, j'aimerais que la variable itérative soit de type string
. Ce n'est probablement pas possible que le type itératif soit une string
alors quel est le moyen le plus efficace d'itérer à travers cette chaîne?
Dois-je créer un nouvel objet string
à chaque itération de la boucle ou puis-je effectuer un casting en quelque sorte?
String myString = "Hello, World";
foreach (Char c in myString)
{
// what I want to do in here is get a string representation of c
// but I can't cast expression of type 'char' to type 'string'
String cString = (String)c; // this will not compile
}
Utilisez la méthode .ToString ()
String myString = "Hello, World";
foreach (Char c in myString)
{
String cString = c.ToString();
}
Vous avez deux options. Créez un objet string
ou appelez la méthode ToString
.
String cString = c.ToString();
String cString2 = new String(c, 1); // second parameter indicates
// how many times it should be repeated
Il semble que la chose évidente à faire est la suivante:
String cString = c.ToString()
Avec interpolation C # 6:
char ch = 'A';
string s = $"{ch}";
Cela rase quelques octets. :)
Créez une nouvelle chaîne à partir du caractère.
String cString = new String(new char[] { c });
ou
String cString = c.ToString();
Créer une méthode d'extension:
public static IEnumerable<string> GetCharsAsStrings(this string value)
{
return value.Select(c =>
{
//not good at all, but also a working variant
//return string.Concat(c);
return c.ToString();
});
}
et boucle à travers les chaînes:
string s = "123456";
foreach (string c in s.GetCharsAsStrings())
{
//...
}
String cString = c.ToString();
n'est probablement pas possible d'avoir le type itératif soit une chaîne
Bien sûr que ça l'est:
foreach (string str in myString.Select(c => c.ToString())
{
...
}
Chacune des suggestions des autres réponses peut remplacer c.ToString()
. Le plus efficace par un petit cheveu est probablement c => new string(c, 1)
, ce que char.ToString()
fait probablement sous le capot.
Pourquoi pas ce code? Ce ne sera pas plus rapide?
string myString = "Hello, World";
foreach( char c in myString )
{
string cString = new string( c, 1 );
}