Я вполне уверен, что это невозможно в C # 3.0. Разделы в ссылка , которая охватывает преобразования, составляет 6.4. А именно, 6.4.4 «Пользовательские неявные преобразования».
В нем говорится только о преобразованиях из S-> T (а не S-> T-> U), которые охватывают такие случаи, как:
StringToInt _t = "foo";
int t = _t;
и
int t = (StringToInt)"foo";
Там, где в обоих случаях используется только S-> T (дважды).
Я почти уверен, что это невозможно в C # 3.0.
Разрешение S-> T-> U потребует гораздо больше работы, выполняемой средством сопоставления типов, по крайней мере, в соответствии с указанным алгоритмом.