2015-11-30 3 views
-2

Я новичок в C#, я занимаюсь своей практикой, преобразовывая некоторый код в C++ на C#. Но застрял здесь, не знаю, как преобразовать эту функцию в C#, которые берут любую коллекцию, ее 1-й элемент и последний элемент и добавляют в нее элемент.C++ to C# conversion

template<class _Col> 
void __insert 
    (
    _Col&     collection, 
    typename _Col::iterator first, 
    typename _Col::iterator last 
    ) 
{ 
    for (; first != last; ++first) 
    { 
     collection.insert(*first); 
    } 
} 
+0

В C# нет прямого эквивалента этому коде. Вам нужно будет выяснить, что такое результат, и написать совершенно новый метод, а не только клон из вышеперечисленного. – Corey

+0

Перечислимые и общие типы Google C#, затем дайте ему шанс и скажите нам, что является результатом. – Gnqz

ответ

2

Позвольте мне объяснить:

  1. Это обобщенная функция.
  2. Используется приходная коллекция. с итераторами в нашем случае IList<Type> интерфейс для коллекции от System.Collections.Generic namespace.

так что позволяет начать работу:

, как я знаю, C# по умолчанию контейнеры не обеспечивает функцию итератора, поэтому я resplaced его использованием IList<Type> интерфейс которым обеспечивают аналогичны итератор индексов.

Как вы можете видеть, что это не хорошо делать, как этот

template<class _Col> 
void __insert 
    (
    _Col&     collection, 
    typename _Col::iterator first, 
    typename _Col::iterator last 
    ) 
{ 
    for (; first != last; ++first) 
    { 
     collection.insert(*first); 
    } 
} 

Поскольку _Col может содержать не только классы коллекций шаблонов, но и любой другой класс, и если этот другой класс не prowide соответствующего интерфейса компиляции процесс выходит из строя. То же самое для итераторов есть много его типов.

Поэтому я настоятельно рекомендую вам придерживаться конвенции, что если вы считаете, что используете шаблон типа как своего рода функцию сбора, попробуйте использовать объявление collection<Type> для параметра и funcName<Type> о функции. Это обеспечит правильную обработку ваших данных.

static void Insert<Type>(IList<Type> outputCollection, IList<Type> inputCollection, int start, int end) 
{ 
     if (end >= inputCollection.Count) 
     return; 

     for (int i = start; i < end; i++) 
      outputCollection.Add(inputCollection[i]); 
}