Преобразование объекта с явными преобразованиями в универсальный метод типа T - PullRequest
0 голосов
/ 11 июня 2019

У меня есть AClass , который содержит явные преобразования в виде методов:

public static explicit operator Double(AClass x)

для всех примитивных типов: int, string и т. Д. Класс не реализует IConvertible interface.

Вдобавок к этим ограничениям я делаю универсальный метод, который имеет следующую сигнатуру:

private void VerifyBla<T>(string abc, T expected)

AClass - это, в основном, обертка вокруг примитивных типов, и в этом методе я хотел быпреобразовать AClass в T и проверить его значение.

Я попытался использовать:

(T)aClass

, но intelisense: невозможно преобразоватьнаберите 'AClass' в T.

Есть ли обходной путь, как решить эту проблему, с минимальными изменениями AClass или без изменений?

Я пробовал использовать:

(T)Convert.ChangeType(myobject, typeof(T));

, но это не удалось, потому что AClass не реализует IConvertible.И если бы я реализовал это, мне нужно было бы реализовать много методов, я думаю.

1 Ответ

0 голосов
/ 11 июня 2019

Если вы не хотите реализовывать полный интерфейс IConvertible, то имеет смысл выполнить сопоставление с шаблоном типа только для нескольких имеющихся у вас экземпляров:

switch (expected)
{
    case Double dbl: return dbl == (Double)aClass;
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...