C# 希望获得有关.RemoveRange()的帮助/解释

C# 希望获得有关.RemoveRange()的帮助/解释,c#,C#,好的,我对编程基本上是新手,但从C开始。我还是一个近乎绝对的初学者,只是写一些小项目来熟悉这门语言。我决定这就是我想要玩的,所以首先我创建了一个类牌组,它包含一张牌列表。这个函数就是我想要用来洗牌的。我意识到这不是最有效的方法,但我想完成一个“现实的”洗牌。这也是我头脑中的一个粗略想法。代码运行1次,但有一次我调用deck.RemoveRange(0,52);它从每个列表中删除所有内容,包括NewDeck、FirstCut、SecondCut。(这对我来说只是一个学习实验,与“有用的东西”无关)

好的,我对编程基本上是新手,但从C开始。我还是一个近乎绝对的初学者,只是写一些小项目来熟悉这门语言。我决定这就是我想要玩的,所以首先我创建了一个类牌组,它包含一张牌列表。这个函数就是我想要用来洗牌的。我意识到这不是最有效的方法,但我想完成一个“现实的”洗牌。这也是我头脑中的一个粗略想法。代码运行1次,但有一次我调用deck.RemoveRange(0,52);它从每个列表中删除所有内容,包括NewDeck、FirstCut、SecondCut。(这对我来说只是一个学习实验,与“有用的东西”无关)

编辑:为这些混乱的代码道歉,在电脑理解之前,我仍然会吐出脑子里的东西。我想说的是,我知道这是一个引用类型与值类型的问题,我只是觉得我在创建新项目,而实际上我并没有这样做。所以我想知道它是如何应用于.RemoveRange的,如果它只删除了一个元素或者删除了基础参考(书籍和视频从来没有解释过这一点,所以我试图从这个错误中学习)

公共静态列表GetNewDeck(int-ShuffleTimes)
{
甲板主甲板=新甲板();
列表NewDeck=MainDeck.DeckOfCards;
List ShuffledDeck=新列表();
对于(int i=0;i=SecondCut.Count&&SecondCut.Count!=0)
{
对于(int ri=0;ri=FirstCut.Count&&FirstCut.Count!=0)
{

对于(int-si=0;si当你把一个列表分配给另一个列表时,你不是在复制它,而是在一次又一次地给同一个列表分配一个引用。因此,每次你这样做时,它们都指向同一个位置。因此,清除一个就清除了所有

您可能想要的是制作列表的副本。例如:

NewDeck = new List<Card>(deck);
NewDeck=新列表(deck);

这不会复制卡对象本身,但会创建一个引用卡的新列表,这可能适合您的需要。

此代码非常混乱。但我怀疑问题与对象引用的概念有关。您谈论的是多个“组”,但请注意,您只调用了
new Deck()
一次。因此,您只有一个实际的组块。您对该组块所做的任何修改都可以在该组块的任何其他引用中看到。您需要了解它们之间的区别。不,我认为我的问题在于引用类型和值类型,我只是感到困惑,因为我想我多次调用了一个新列表,并想知道e我犯了错误。有趣的是,一旦你指出我所做的事情,它就变得显而易见,完全回答了我的问题。非常感谢。这需要一些思考,但这实际上也回答了我的基本问题。我为它如此混乱的代码表示歉意。这只是我试图从头开始写的第二件事我的目标是理解C#(不一定要做一些有用的东西)书籍和视频,但通过这样做,我能够真正理解引用类型和值类型。谢谢。从这一点上,我能够将所有内容重构到10行代码。
NewDeck = new List<Card>(deck);