Tôi đã gặp một hành vi lạ trong dự án .NET 4 (rất lớn) của tôi. Tại một số điểm trong các mã, tôi đề cập đến một loại đầy đủ, nói:Tại sao System.Type.GetType ("Xyz") trả về null nếu typeof (Xyz) tồn tại?
System.Type type = typeof (Foo.Bar.Xyz);
sau này, tôi làm điều này:
System.Type type = System.Type.GetType ("Foo.Bar.Xyz");
và tôi nhận được lại null
. Tôi không thể hiểu được lý do tại sao điều này xảy ra, bởi vì tên loại của tôi là chính xác, và tôi đã kiểm tra với các loại khác và chúng được giải quyết đúng cách. Hơn nữa, truy vấn LINQ sau đây tìm thấy loại:
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
System.Type type = types.FirstOrDefault();
Có bất kỳ lý do nào tại sao System.Type.GetType
có thể không thành công?
Tôi đã cuối cùng đã phải nhờ đến đoạn mã này thay vì GetType
:
System.Type MyGetType(string typeName)
{
System.Type type = System.Type.GetType (typeName);
if (type == null)
{
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
type = types.FirstOrDefault();
}
return type;
}
Cảm ơn bạn rất nhiều vì đã trả lời. Thật vậy, tất cả các loại khác tôi đã được giải quyết cho đến bây giờ hoặc là nằm trong cùng một hội đồng hoặc trong mscorlib, vì vậy tôi đã không bắt lỗi trước. –
Cung cấp 'System.Type.GetType' với thông tin lắp ráp một phần hoạt động ngay cả khi lắp ráp có tên mạnh. Tôi đã kiểm tra 'System.Type.GetType (" Foo.Bar.Baz, MyCompany.MyAssembly ")' và nó hoạt động ngay cả khi 'MyCompany.Assembly' có một tên mạnh. –
để tham khảo trong tương lai, nếu bạn muốn sử dụng backtick trong một mã nổi bật (và BẠN có lẽ sẽ;), sử dụng double backticks để bắt đầu và đóng báo giá :). Xem [tại đây] (http://meta.stackexchange.com/q/82718/237379). – Noctis