我是编程新手。我正在通过第9频道的Bob Tabors视频学习c#。
你能解释为什么我们不能做这样的事情:
string mijnVoornaam = "Remolino";
char[] mijnCharArray = mijnVoornaam.ToCharArray();
mijnCharArray = mijnCharArray.Reverse();
而不是:
string mijnVoornaam = "Remolino";
char[] mijnCharArray = mijnVoornaam.ToCharArray();
Array.Reverse(mijnCharArray);
答案 0 :(得分:4)
你可以做到这两点。
首先使用LINQ执行,它会创建一个新序列:
using System.Linq;
mijnCharArray = mijnCharArray.Reverse().ToArray();
第二个进行就地更改,优化和更高效:
Array.Reverse(mijnCharArray);
选择是你的,取决于你的使用场景。
答案 1 :(得分:3)
因为第一个使用LINQ
扩展方法Reverse
,它返回IEnumerable<char>
而不是char[]
。所以你可以......
mijnCharArray = mijnCharArray.Reverse().ToArray();
但效率低于Array.Reverse
,因为它必须创建一个新数组并且事先不知道最终大小。
答案 2 :(得分:3)
实际上;你可以。
.Reverse
是LINQ扩展方法,返回IEnumerable<T>
,这就是赋值失败的原因。但是,如果你这样做了:
string mijnVoornaam = "Remolino";
char[] mijnCharArray = mijnVoornaam.ToCharArray();
mijnCharArray = mijnCharArray.Reverse().ToArray();
它会工作得很好。请注意,这将返回一个 new 数组,其中的字符相反。
Array.Reverse
执行就地撤消,因此返回void
,您无法分配结果。
答案 3 :(得分:1)
如果你使用System.Linq
,你实际上可以这样做,但这是IEnumerable的扩展方法。
答案 4 :(得分:1)
由于Reverse
返回的Reverse()
不是IEnumerable<char>
,因此您无法使用char[]
扩展方法。您必须将IEnumerable<char>
强制转换为数组。所以这适用于例如:
char[] c = mijnVoornaam.Reverse().ToArray();
您也可以使用Reverse
string
使用此扩展方法:
public static class ExtensionMethods
{
public static string Reverse(this string s)
{
return string.Concat(s.Reverse());
// or:
// return new string(s.Reverse().ToArray());
}
}
然后打电话:
string reverse = "name".Reverse();