2016-10-31 3 views
-1

Я пытаюсь понять, что происходит в фрагменте кода ниже.C#, отображение списка из существующего списка?

В новом экземпляре списка, это похоже, что они ссылаются на другой список coins? Я никогда раньше этого не видел, какова цель? Извините, если это уже ответ, если это так, пожалуйста, перенаправьте меня. Спасибо за помощь.

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<int> coins = new List<int>(); 
     List<int> amounts = new List<int>() { 1, 5, 10, 25, 50 }; 

     Change(coins, amounts, 0, 0, 51); 

     Console.ReadKey(); 
    } 

    static void Change(List<int> coins, List<int> amounts, int highest, int sum, int goal) 
    { 
     if (sum == goal) 
     { 
      Display(coins, amounts); 
      return; 
     } 

     if (sum > goal) 
     { 
      return; 
     } 

     foreach (int value in amounts) 
     { 
      if (value >= highest) 
      { 
       List<int> copy = new List<int>(coins); // <<<<<<< 
       copy.Add(value); 
       Change(copy, amounts, value, sum + value, goal); 
      } 
     } 
    } 

    static void Display(List<int> coins, List<int> amounts) 
    { 
     foreach (int amount in amounts) 
     { 
      int count = coins.Count(value => value == amount); 
      Console.WriteLine("{0}: {1}", 
       amount, 
       count); 
     } 

     Console.WriteLine(); 
    } 
} 
+2

Они создают новую копию исходного списка таким образом, когда новое значение добавляется к нему, оригинал один не изменяется. –

ответ

2

Вот описание того, что делают линии.

List<int> copy = new List<int>(coins); // Creates a new list, initializing the values with the values in coins (creating a copy of coins). 
copy.Add(value); // adds additional value to the copy. 
0

Из документации MSDN https://msdn.microsoft.com/en-us/library/fkbw11z0(v=vs.110).aspx:

Список Конструктора (IEnumerable)

Инициализирует новый экземпляр класса List, который содержит элементы, скопированные из указанной коллекции и имеет достаточную емкость для размещения количество копируемых элементов.

List<int> copy = new List<int>(coins); // They are creating a copy of the list `coins`, called `copy`. 
Смежные вопросы