Насколько я знаю, ничего из того, что вы ищете, не существует. Наиболее близким, что я могу придумать для первого требования, будет TypeConverter . Однако TypeConverters, похоже, ориентированы на поддержку дизайнера и относятся только к одному типу, который всегда будет типом источника или назначения.
Чтобы найти методы преобразования для типа, вы можете создать функцию для поиска методов со специальными именами op_Implicit
и op_Explicit
(согласно MSDN ) в типах источника или назначения с соответствующими аргументами и возвращаемыми типами.
Кроме того, причина, по которой IsAssignableFrom
возвращает false в этом случае, заключается в том, что он проверяет, может ли один тип быть назначенным переменной другого типа напрямую без преобразований. Операторы преобразования добавляют путаницу к этой проблеме, потому что в исходном коде появляется , что вы делаете простое присваивание, но вы фактически вызываете метод и присваиваете его результат.