2012-12-06 20 views
26

を列挙したいのですが、その代わりにcharsを返すのですが、繰り返し変数の型をstringにしたいと思います。これはおそらく反復型をstringにすることはできないので、この文字列を反復する最も効率的な方法は何ですか?1つの文字を文字列に変換するにはどうすればよいですか?

ループの繰り返しごとに新しい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 
} 

答えて

32

.ToString()メソッドを使用しますが

String myString = "Hello, World"; 
foreach (Char c in myString) 
{ 
    String cString = c.ToString(); 
} 
+2

CLR型の代わりにC#型の 'string'と' char'を使用することを検討してください。最終的には同じですが、間違いなくC#ではより正確です。 – andleer

+0

@andleerあなたが正しいです、私はちょうどToStringメソッドを表示するOPのサンプルコードを変更しました。 –

+1

コメントはあなたのものではなく、あなたに向けられています。心配ない。 – andleer

4

行うには明白なことは、このようです:

String cString = c.ToString() 
+10

私はあなた自身の質問に答えたと思います。 – seand

1

がcharから新しい文字列を作成します。

String cString = new String(new char[] { c }); 

または

String cString = c.ToString(); 
-1

あなたがしようとしました:

String s = new String(new char[] { 'c' });

+1

ちょっとした文字列を取る人はいません –

+0

申し訳ありませんが、編集してテストしました – trebuchet

0
String cString = c.ToString(); 
5

2つのオプションがあります。 stringオブジェクトを作成するか、ToStringメソッドを呼び出します。

String cString = c.ToString(); 
String cString2 = new String(c, 1); // second parameter indicates 
            // how many times it should be repeated 
1

拡張メソッドを作成します。文字列による

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()) 
{ 
    //... 
} 
+0

うわー、これはとてもかわいいです... –

0

なぜ、このコードは?それは速くないでしょうか?

char ch = 'A'; 
string s = $"{ch}"; 

これは数バイトを剃る:C#6補間により

string myString = "Hello, World"; 
foreach(char c in myString) 
{ 
    string cString = new string(c, 1); 
} 
関連する問題