谁能告诉我为什么下面方法返回的字符串长度总是60?这是控制台应用程序中的 C# 方法。
static string Reverse(string stringToReverse)
{
string s = stringToReverse.Reverse().ToString();
return s;
}
作为招聘过程的一部分,我们要求面试候选人编写一种反转字符串的方法。这是我们得到的一个答案。长度问题让我们感到疑惑。
谁能告诉我为什么下面方法返回的字符串长度总是60?这是控制台应用程序中的 C# 方法。
static string Reverse(string stringToReverse)
{
string s = stringToReverse.Reverse().ToString();
return s;
}
作为招聘过程的一部分,我们要求面试候选人编写一种反转字符串的方法。这是我们得到的一个答案。长度问题让我们感到疑惑。
问题是该方法根本行不通。它使用 LINQ 将其stringToReverse
视为IEnumerable<char>
相反的...但是调用返回的 byToString
不会做这里想要的。不要看长度——看字符串本身!(当然,对此的单个单元测试将证明这一点。)IEnumerable<char>
Reverse()
对此的明显解决方法是:
return new string(stringToReverse.Reverse().ToArray());
...但是由于 Unicode 组合字符、代理对等,这实际上仍然不会做正确的事情。实际上正确地反转字符串会非常复杂......当然不是我希望在面试,但意识到这比你想象的要难,这将是一个好的开始。
因为结果:
stringToReverse.Reverse().ToString()
是:
"System.Linq.Enumerable+<ReverseIterator>d__a0`1[System.Char]"
而不是字符串的反转内容。这是因为被方法string
视为一个,调用此集合将为您提供集合的字符串表示形式,而不是其内容。IEnumerable<char>
Reverse()
ToString()
你看过结果字符串吗?
System.Linq.Enumerable+d__a0`1[System.Char]
您的候选人使用 LinQ Reverse 方法创建了一个枚举,但没有意识到无法通过调用 .ToString() 将 Enumerable 转换为字符串。
一种可能的方法是从 char 数组创建一个新字符串:
static string Reverse(string stringToReverse)
{
return new string(stringToReverse.Reverse().ToArray());
}