为什么是Array.Reverse(myCharArray)而不是myCharArray = myCharArray.Reverse?

时间:2014-10-30 16:16:04

标签: c# arrays reverse

我是编程新手。我正在通过第9频道的Bob Tabors视频学习c#。

你能解释为什么我们不能做这样的事情:

string mijnVoornaam = "Remolino";
char[] mijnCharArray = mijnVoornaam.ToCharArray();
mijnCharArray = mijnCharArray.Reverse();

而不是:

string mijnVoornaam = "Remolino";
char[] mijnCharArray = mijnVoornaam.ToCharArray();
Array.Reverse(mijnCharArray);

5 个答案:

答案 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();