Вывод экземпляра для обработки объекта в C#C#

Место общения программистов C#
Ответить
Anonymous
 Вывод экземпляра для обработки объекта в C#

Сообщение Anonymous »

Я расширяю свою библиотеку C# J2K для динамической регистрации кодеков из других сборок. Эта часть работает, но у меня возникли проблемы с пониманием IsAssignableFrom(TypeInfo) и того, как я могу определить, какой экземпляр класса будет обрабатывать данный тип (SKBitmap, Image и т. д.).
Пока это то, что я придумал. У меня есть интерфейс с именем IImageCreator, и все кодеки создаются в

Код: Выделить всё

static readonly List _creators
Тогда у меня есть абстрактный базовый класс, реализующий IImageCreator, например:

Код: Выделить всё

abstract class ImageCreator : IImageCreator
Кодеки затем реализуются в запечатанные классы следующим образом:

Код: Выделить всё

sealed class SKBitmapImageCreator : ImageCreator {...}
sealed class WindowsBitmapImageCreator : ImageCreator {...}
и т. д.
У меня есть статический метод для кодирования изображения:

Код: Выделить всё

static BlkImgDataSrc ToPortableImageSource(object imageObject)
{
_creators.Single(c => c.GetType().GetTypeInfo().IsAssignableFrom(imageObject.GetType().GetTypeInfo()));
Здесь я зависаю, поскольку выдает исключение. Последовательность не содержит соответствующего элемента.
Обратите внимание, что imageObject будет иметь обрабатываемый тип, например SKBitmap.
У меня создалось впечатление, что это позволит определить правильный экземпляр для обработки imageObject на основе документация:

Код: Выделить всё

Returns true if any of the following conditions is true:
(...)
c is a generic type parameter, and the current instance represents one of the constraints of c.
Где я сбился с пути? Как я могу определить правильный экземпляр для обработки объекта?

Подробнее здесь: https://stackoverflow.com/questions/797 ... in-c-sharp
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»