Tôi đang viết .NET On-the-Fly trình biên dịch cho CLR kịch bản và muốn phương pháp thực hiện làm chung chấp nhận được:điều hành như và các lớp generic
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
}
Nhưng tôi nghĩ rằng điều hành as
sẽ rất hữu ích: nếu loại kết quả không phải là phương pháp T
sẽ trả lại null
, thay vì ngoại lệ! Có thể làm được không?
Cảm ơn bạn rất nhiều vì đã trả lời. Tôi sẽ sử dụng nó, kiểm tra và đánh dấu là một câu trả lời. Và, tôi đã sử dụng mã tiếp theo của tôi: MyClass c = compiler.Execute(); Tôi nghĩ rằng nó tốt hơn sau đó MyClass c = compiler.Execute() như MyClass; (kiểm tra bên trong là tốt hơn sau đó bên ngoài, tôi đoán) –
abatishchev
Nhưng kiểm tra vẫn còn cần thiết bên ngoài - kiểm tra cho null! :) Bằng cách làm cho người dùng viết 'như MyClass', bạn làm cho nó rõ ràng hơn rằng việc kiểm tra null là bắt buộc. –
Hm .. Có vẻ như bạn đã đúng! Tôi sẽ khuyên bạn nên sử dụng 'bình thường' Thực thi(), nhưng đối với người dùng cuối nó có thể hữu ích để có 'bất thường' Execute(), ngoài ra 'thí nghiệm chung' một số cách :) – abatishchev