Piszę .NET On-the-Fly kompilatora dla CLR skryptów i chcą uczynić metoda rodzajowa dopuszczalne wykonanie:Operator jak i klas generycznych
object Execute()
{
return type.InvokeMember(..);
}
T Execute<T>()
{
return Execute() as T; /* doesn't work:
The type parameter 'T' cannot be used with the 'as' operator because
it does not have a class type constraint nor a 'class' constraint */
// also neither typeof(T) not T.GetType(), so on are possible
return (T) Execute(); // ok
}
Ale myślę, że operator as
będzie bardzo przydatny: jeśli typ wynik nie jest T
metoda zwróci null
, zamiast wyjątku! Czy można to zrobić?
Dziękuję bardzo za odpowiedź. Będę go używał, sprawdzam i oznaczam jako odpowiedź. I mam następne użycie mojego kodu: MyClass c = compiler.Execute(); Myślę, że lepiej niż MyClass c = compiler.Execute() jako MyClass; (sprawdź wewnątrz jest lepiej niż na zewnątrz, tak myślę) –
abatishchev
Ale czek jest nadal potrzebny na zewnątrz - czek na zero! :) Dzięki temu, że użytkownik pisze "jako MyClass", stajesz się bardziej jasny, że wymagane jest sprawdzenie zerowej wartości. –
Hm ... Wygląda na to, że masz rację! Polecam używać 'normalnego' Execute(), ale dla użytkownika końcowego może być pomocne posiadanie takiego "nienormalnego" Execute(), dodatkowo "ogólny eksperyment" w jakiś sposób :) – abatishchev