C# 无法反转整数数组

C# 无法反转整数数组,c#,arrays,reverse,C#,Arrays,Reverse,我目前正在创建一个图例组件,该组件将文本映射到渐变外观的图例上,如下所示: 中心代码段如下所示(省略图形声明代码段,因为这不是主要代码段): 将步骤存储到整数数组中的数组,大小为10 int[] legend = new int[numberOfItems]; for (int i = 0; i < legend.Length; i++) { legend[i] = step * i; } 我也尝试过:

我目前正在创建一个图例组件,该组件将文本映射到渐变外观的图例上,如下所示:

中心代码段如下所示(省略
图形
声明代码段,因为这不是主要代码段):

步骤
存储到
整数
数组中的数组,大小为
10

        int[] legend = new int[numberOfItems];
        for (int i = 0; i < legend.Length; i++) {
            legend[i] = step * i;
        }
我也尝试过:

        legend.Reverse();
        for (int i = 0; i < numberOfItems; i++) {
            g.DrawString(legend[i].ToString(), drawFontX, Brushes.White, ((newWidth / 2) - 5), (newHeight / 10) + (verticalDistance * i), stringFormatTimes);    
        }
legend.Reverse();
对于(int i=0;i
正如您所知,我正在尝试让图形将文本从最大值渲染到最小值,而不是它现在所做的,即0-1080

我的问题是,尽管使用了两种阵列反转方法,但我无法反转
图例
阵列。我不太确定我做错了什么。

试试这个:

legend = legend.Reverse().ToArray();
问题是您使用的
反向
方法不会更改原始对象;它以与原始对象相反的顺序创建一个新对象。但是您没有保存
Reverse
方法的结果。只是被忽视了。如果将
legend
变量的值重新指定给
Reverse
方法的结果,这将解决您的问题

另一种选择是使用
列表

列表图例=新列表(numberOfItems);
对于(int i=0;i
在这里,您将调用
List
类上的
Reverse
方法,该方法会更改调用列表的顺序,而不是返回新实例。

尝试以下操作:

legend = legend.Reverse().ToArray();
问题是您使用的
反向
方法不会更改原始对象;它以与原始对象相反的顺序创建一个新对象。但是您没有保存
Reverse
方法的结果。只是被忽视了。如果将
legend
变量的值重新指定给
Reverse
方法的结果,这将解决您的问题

另一种选择是使用
列表

列表图例=新列表(numberOfItems);
对于(int i=0;i

在这里,您将调用
List
类上的
Reverse
方法,该方法会更改调用列表的顺序,而不是返回新实例。

图例。Reverse
绑定到
可枚举。Reverse
将返回副本。这应该教会你不要在不必要的情况下改变状态。相反,从旧数据创建新数据

var legendContents =
 Enumerable.Range(0, numberOfItems)
 .Select(i => step * i)
 .Reverse()
 .Select(i => new { Text = i.ToString(), Y = (newHeight / 10) + (verticalDistance * i) }
 .ToArray();

//at this point you can easily examine all draw operations in the debugger

var xPos = ((newWidth / 2) - 5);
foreach (var legendItem in legendContents)
 g.DrawString(legendItem.Text, drawFontX, Brushes.White, xPos, legendItem.Y, stringFormatTimes);    

使用函数式编程风格。保存了大量代码,现在可读性很强,易于更改。

legend.Reverse
绑定到
可枚举。Reverse
将返回一份副本。这应该教会你不要在不必要的情况下改变状态。相反,从旧数据创建新数据

var legendContents =
 Enumerable.Range(0, numberOfItems)
 .Select(i => step * i)
 .Reverse()
 .Select(i => new { Text = i.ToString(), Y = (newHeight / 10) + (verticalDistance * i) }
 .ToArray();

//at this point you can easily examine all draw operations in the debugger

var xPos = ((newWidth / 2) - 5);
foreach (var legendItem in legendContents)
 g.DrawString(legendItem.Text, drawFontX, Brushes.White, xPos, legendItem.Y, stringFormatTimes);    

使用函数式编程风格。保存了大量代码,现在可读性很强,易于更改。

您错过了作业:

legend = legend.Reverse().ToArray();

你错过了你的作业:

legend = legend.Reverse().ToArray();

您的解决方案和Dan和Dave Bish建议的解决方案有什么好处吗?框架中有多种反向方法。选择哪一个取决于接收器的确切类型。您可能会意外调用列表。例如,反向调用。这是BCL中的一个设计缺陷。对不起,你有没有看我前面问题的代码片段来实现数组reversion=P下面的东西?事实上这很有趣,除非我不在这个笑话中。我还将我的项目命名为xPos和stringFormatTimes。无论如何,谢谢你的帮助!您的解决方案和Dan和Dave Bish建议的解决方案有什么好处吗?框架中有多种反向方法。选择哪一个取决于接收器的确切类型。您可能会意外调用列表。例如,反向调用。这是BCL中的一个设计缺陷。对不起,你有没有看我前面问题的代码片段来实现数组reversion=P下面的东西?事实上这很有趣,除非我不在这个笑话中。我还将我的项目命名为xPos和stringFormatTimes。无论如何,谢谢你的帮助!