2012-12-06 39 views
26

我想列举一个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 
} 

回答

32

使用的ToString()方法

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

考虑使用C#类型'string'和'char'来代替CLR类型。最后相同,但可以说在C#中更正确。 – andleer

+0

@andleer你是对的,我刚刚修改了OP的示例代码来显示ToString方法。 –

+1

评论是针对他,而不是你。别担心。 – andleer

4

看来,很明显的事情是这样的:

String cString = c.ToString() 
+10

我想你已经回答了你自己的问题。 – seand

1

创建来自焦炭的新字符串。

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

String cString = c.ToString(); 
-1

你尝试:

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

+1

有没有ctor,只需char –

+0

对不起,编辑和测试 – trebuchet

0
String cString = c.ToString(); 
5

你有两种选择。创建一个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

为什么不代码?它会不会更快?

string myString = "Hello, World"; 
foreach(char c in myString) 
{ 
    string cString = new string(c, 1); 
} 
1

用C#6内插:

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

这刮胡子几个字节。 :)