Перечисление <Type1> в Список <Type2> преобразования WPF [дубликаты]

1

Я создал простой тип, который содержит только одно свойство зависимостей "Текст" возвращает строку. Для легкого преобразования из строки в мой тип я написал этот код:

public static implicit operator string(StringDP sdp)
{
    return sdp.Text;
}

public static implicit operator StringDP(string str)
{
    return new StringDP(str);
}

Я хочу иметь аналогичное преобразование из List<string> в List<myType>. Могу ли я это сделать? Или я должен использовать что-то вроде этого:

public List<string> Convert(List<myType> lst);
public List<myType> Convert(List<string> lst);

Спасибо!

Теги:
list
wpf
type-conversion

1 ответ

1
Лучший ответ

Нет, это невозможно. Из документации:

Либо тип аргумента, который нужно преобразовать, либо тип результата преобразования, но не оба, должен быть типом-содержащим.

Оба типа, связанные с вашим гипотетическим неявным преобразованием, являются конкретными версиями общего класса List<T>. Поскольку вы не можете добавлять операторов в класс List<T> самостоятельно, и с тех пор, когда должны быть implicit операторы для достижения вашей цели, это невозможно.

Без дополнительного контекста я признаю, что я не могу точно комментировать неявное преобразование в и из string которую вы определили. Но в целом вы должны быть очень осторожны с implicit преобразованиями. Предполагая, что неявное преобразование вашего типа вписывается в "безопасные" рекомендации, преобразование целого списка типа будет "хорошим".

Это преобразование может быть выполнено с помощью специальных методов, таких как ваши примеры. Или вы можете использовать LINQ или метод List<T>.ConvertAll(). Например:

List<string> listOfString = listOfMyType.Select(item => (string)item).ToList();
List<myType> listOfMyType = listOfString.ConvertAll(item => (myType)item);
// etc.

Однако даже там я бы посоветовал вам быть осторожным в том, как вы используете что-то подобное. Одно дело, чтобы преобразовать один экземпляр значения, но преобразование целой коллекции связано с гораздо большими накладными расходами и, скорее всего, не является правильным способом решения проблемы.

Не знаю, в чем проблема, я не могу предложить альтернативу. Просто чтобы предложить вам быть очень осторожным в пути к дизайну, вы, кажется, направляетесь вниз.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню