string
を列挙し、chars
を返す代わりに、反復変数をstring
型にしたいと思います。これはおそらく、反復型をstring
にすることはできないので、この文字列を反復処理する最も効率的な方法は何ですか?
ループの各反復で新しいstring
オブジェクトを作成する必要がありますか、それとも何らかの方法でキャストを実行できますか?
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
}
.ToString()メソッドを使用する
String myString = "Hello, World";
foreach (Char c in myString)
{
String cString = c.ToString();
}
2つのオプションがあります。 string
オブジェクトを作成するか、ToString
メソッドを呼び出します。
String cString = c.ToString();
String cString2 = new String(c, 1); // second parameter indicates
// how many times it should be repeated
C#6補間の場合:
char ch = 'A';
string s = $"{ch}";
これにより、数バイトが削られます。 :)
明らかなことはこれだと思われます:
String cString = c.ToString()
文字から新しい文字列を作成します。
String cString = new String(new char[] { c });
または
String cString = c.ToString();
拡張メソッドを作成します。
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();
});
}
文字列をループします:
string s = "123456";
foreach (string c in s.GetCharsAsStrings())
{
//...
}
試しましたか:
String s = new String(new char[] { 'c' });
String cString = c.ToString();
空の文字列""
で+を使用できます。以下のコードを確認してください。
char a = 'A';
//a_str is a string, the value of which is "A".
string a_str = ""+a;
おそらく、反復型を文字列にすることはできません
もちろんそうだ:
_foreach (string str in myString.Select(c => c.ToString())
{
...
}
_
c.ToString()
の代わりに他の回答の提案を使用できます。おそらく、小さな髪で最も効率的なのはc => new string(c, 1)
であり、これはおそらくchar.ToString()
が内部で行うことです。
このコードはなぜですか?速くなりませんか?
string myString = "Hello, World";
foreach( char c in myString )
{
string cString = new string( c, 1 );
}