我想列举一个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();
}
可能不可能将迭代类型设为字符串
当然是啦:
foreach (string str in myString.Select(c => c.ToString())
{
...
}
其他答案中的任何建议都可以替代c.ToString()
。可能最小的头发效率是c => new string(c, 1)
,这是char.ToString()
可能在引擎盖下做的。
你有两个选择。创建一个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()
从char创建一个新字符串。
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 cString = c.ToString();
你试过了吗:
String s = new String(new char[] { 'c' });
为什么不用这个代码?会不会更快?
string myString = "Hello, World";
foreach( char c in myString )
{
string cString = new string( c, 1 );
}