powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Extension метод для коллекций
6 сообщений из 6, страница 1 из 1
Extension метод для коллекций
    #38976915
breee3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Написал extension метод.
Код: c#
1.
2.
3.
4.
5.
6.
public static Array ToArray<T>(this ICollection coll) where T : ICollection<T>
{
    T[] arr = new T[coll.Count];
    coll.CopyTo(arr, 0);
    return arr;
}


вызов
Код: c#
1.
2.
3.
4.
5.
6.
public void Foo( DataTable a)
{            

    DataTable b = new DataTable();          
    b.Columns.AddRange(a.Columns.ToArray());
}


Почему-то не работает.
"System.Data.DataColumnCollection" не содержит определения для "ToArray" и не был найден метод расширения "ToArray", принимающий тип "System.Data.DataColumnCollection" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)Наиболее подходящий перегруженный метод для "System.Data.DataColumnCollection.AddRange(System.Data.DataColumn[])" имеет несколько недопустимых аргументов
Наиболее подходящий перегруженный метод для "System.Data.DataColumnCollection.AddRange(System.Data.DataColumn[])" имеет несколько недопустимых аргументов

Что не так? в гугле пишут
Q: Is it possible to apply an extension method to an interface?
...
A:Of course they can; most of Linq is built around interface extension methods.
...
...
Рейтинг: 0 / 0
Extension метод для коллекций
    #38976916
breee3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой. 3я ошибка такая
Аргумент "1": преобразование типа из "TSource[]" в "System.Data.DataColumn[]" невозможно
...
Рейтинг: 0 / 0
Extension метод для коллекций
    #38976919
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breee3ой. 3я ошибка такая
Аргумент "1": преобразование типа из "TSource[]" в "System.Data.DataColumn[]" невозможно
Переводчики такие переводчики... Постарались, чтобы даже сообщения об ошибках были ни о чем. В представленном вами коде ошибка такая:

Код: plaintext
The type arguments cannot be inferred from the usage. Try specifying the type arguments explicitly.

что означает, что компилятор из выражения
Код: c#
1.
b.Columns.AddRange(a.Columns.ToArray());


не может сам вывести генерик-тип Т extension-метода, и требует указать генерик-тип явно:
Код: c#
1.
b.Columns.AddRange(a.Columns.Cast<DataColumn>().ToArray());


И в данном случае сигнатуру extension-метода вполне можно переписать так:
Код: c#
1.
public static Array ToArray<T>(this ICollection<T> coll)


- это эквивалентно тому, что вы написали. Но и это не нужно, поскольку есть Enumerable.ToArray(TSource) .
...
Рейтинг: 0 / 0
Extension метод для коллекций
    #38976941
breee3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.
Enumerable.ToArray(TSource) действительно вызывается в
Код: c#
1.
b.Columns.AddRange(a.Columns.Cast<DataColumn>().ToArray());


Моя процедура же никак не хочет, вызываться, судя по всему, из-за того что DataColumnCollection наследуется от ICollection, а не от ICollection<T>.
Не понятно зачем так сделано...

Но и самое главное, это всё было пустой затеей. Поскольку DataColumn`ы нельзя вставить в другой DataTable (:
...
Рейтинг: 0 / 0
Extension метод для коллекций
    #38976997
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breee3Поскольку DataColumn`ы нельзя вставить в другой DataTable (:
Если вставить так, как написано выше (все DataColumn), то см. метод DataTable.Clone .
...
Рейтинг: 0 / 0
Extension метод для коллекций
    #38977041
breee3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне надо было из нескольких таблиц в одну. Решил циклами..
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Extension метод для коллекций
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]