tôi có một giao diện chung như thế này:Nhận Loại Giao diện chung?
public interface IResourceDataType<T>
{
void SetResourceValue(T resValue);
}
Sau đó, tôi nhận được lớp này mà thực hiện giao diện của tôi:
public class MyFont : IResourceDataType<System.Drawing.Font>
{
//Ctor + SetResourceValue + ...
}
Và cuối cùng tôi nhận được:
var MyType = typeof(MyFont);
tôi, bây giờ , muốn lấy loại System.Drawing.Font
từ MyType! Tại thời điểm này, tôi có mã này:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
//If test is OK
}
Nhưng tôi không quản lý để "giải nén" Kiểu của tôi ở đây ... Tôi đã thử một vài điều với GetGenericArguments()
và những thứ khác nhưng họ hoặc don' t biên dịch hoặc trả lại giá trị null/Danh sách ... Tôi phải làm gì?
EDIT: Dưới đây là giải pháp phù hợp với mã của tôi đối với những người sẽ nhận được cùng một vấn đề:
if (typeof(IResourceDataType).IsAssignableFrom(MyType))
{
foreach (Type type in MyType.GetInterfaces())
{
if (type.IsGenericType)
Type genericType = type.GetGenericArguments()[0];
}
}
}
Bạn đã xem bài đăng này: http://stackoverflow.com/questions/557340/c-sharp-generic-list-t-how-to-get-the-type-of-t –
Đúng, và một vài của những người khác, họ không trả lời câu hỏi của tôi ... Cảm giác của tôi là tôi phải sử dụng GetInterfaces() và làm một số thứ khác, tôi thực sự đang cố gắng! –