List.Reverse() 在 C# 中没有任何效果
List.Reverse() without any effect in C#
给定以下代码:
List<Digit> tempDigits = input.Digits;
string test = tempDigits.ToString(); // -> {2,2,7}
tempDigits.Reverse();
string test2 = tempDigits.ToString(); // -> {2,2,7}
这是我的代码:
结果(在两者之间,我根据 Thiessen 建议的命名约定重命名了变量)
出于某种原因,反向 soes 似乎没有发挥作用。
这一定很简单。但我不知道问题是什么。希望有人能帮帮忙。
您提供的信息不完整,无法解决该问题。
您提供的信息中的可重现示例未显示相同的症状。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<int> digits = new List<int> {2,2,7};
foreach(int digit in digits)
Console.Write(digit);
Console.WriteLine();
digits.Reverse();
foreach(int digit in digits)
Console.Write(digit);
Console.WriteLine();
}
}
这给出了预期的输出
227
722
https://dotnetfiddle.net/Hs9H0k
我的猜测是,this.Digits
不是可变引用。但这只是一个假设。
您发布的代码在真空中可以正常工作。 (除了,List<>.ToString()
在哪个世界产生“{2,2,7}
”?)
我的主要猜测是,正如 Lesiak 评论的那样,this.Digits
和 input.Digits
指向完全相同的 List<>
实例。所以 Digits1.Reverse()
反转列表,Digits2.Reverse()
反转反转,将其放回原处。也许 this
和 input
是同一回事。或者它们可能是碰巧使用相同的底层 Digits
列表的两个不同的东西。谁知道?
还有很多其他的可能性,其中一些是根据所提供的信息无法猜测的。例如:
- 也许为您提供该列表的
input
控件正在尝试主动管理该列表,并在它发现它被反转后立即重新排序。
- 也许您没有使用
System.Collections.Generic.List<>
类型,而是引用了其他名称空间,其中有人编写了一个 List<>
类型,但其行为与您想象的不一样将。也许它甚至没有实现 Reverse()
,所以编译器正在使用 Enumerable.Reverse()
扩展方法,它不会改变底层数据。
如果不进一步了解您的环境,就无法确定。
给定以下代码:
List<Digit> tempDigits = input.Digits;
string test = tempDigits.ToString(); // -> {2,2,7}
tempDigits.Reverse();
string test2 = tempDigits.ToString(); // -> {2,2,7}
这是我的代码:
结果(在两者之间,我根据 Thiessen 建议的命名约定重命名了变量)
出于某种原因,反向 soes 似乎没有发挥作用。
这一定很简单。但我不知道问题是什么。希望有人能帮帮忙。
您提供的信息不完整,无法解决该问题。
您提供的信息中的可重现示例未显示相同的症状。
using System;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
List<int> digits = new List<int> {2,2,7};
foreach(int digit in digits)
Console.Write(digit);
Console.WriteLine();
digits.Reverse();
foreach(int digit in digits)
Console.Write(digit);
Console.WriteLine();
}
}
这给出了预期的输出
227
722
https://dotnetfiddle.net/Hs9H0k
我的猜测是,this.Digits
不是可变引用。但这只是一个假设。
您发布的代码在真空中可以正常工作。 (除了,List<>.ToString()
在哪个世界产生“{2,2,7}
”?)
我的主要猜测是,正如 Lesiak 评论的那样,this.Digits
和 input.Digits
指向完全相同的 List<>
实例。所以 Digits1.Reverse()
反转列表,Digits2.Reverse()
反转反转,将其放回原处。也许 this
和 input
是同一回事。或者它们可能是碰巧使用相同的底层 Digits
列表的两个不同的东西。谁知道?
还有很多其他的可能性,其中一些是根据所提供的信息无法猜测的。例如:
- 也许为您提供该列表的
input
控件正在尝试主动管理该列表,并在它发现它被反转后立即重新排序。 - 也许您没有使用
System.Collections.Generic.List<>
类型,而是引用了其他名称空间,其中有人编写了一个List<>
类型,但其行为与您想象的不一样将。也许它甚至没有实现Reverse()
,所以编译器正在使用Enumerable.Reverse()
扩展方法,它不会改变底层数据。
如果不进一步了解您的环境,就无法确定。