2009-08-05 49 views
6

Tôi có một phương pháp chung chung như:Không thể trả về 'null' từ các phương thức chung?

public T GetLevelElement<T>(string name) where T : ILevelElement 
{ 
    //[...] 
} 

Mà về cơ bản thực hiện một tra cứu trong một db và trong một số trường hợp nó không (và không thể trở về) kết quả và tôi muốn trở về null.

Tuy nhiên, điều đó rõ ràng là không thể vì 'Không có chuyển đổi tiềm ẩn giữa T và null'. Tôi nên làm gì trong trường hợp này?

Trả lời

24

T không thể rỗng, vì T có thể là một loại giá trị. Thử trả về mặc định (T) hoặc thêm ràng buộc lớp để cho biết rằng T chỉ có thể là loại tham chiếu như vậy:

public T GetLevelElement<T>(string name) where T : ILevelElement, class 
{ 
    [...] 
} 
+3

Trong .NET 3.5 ít nhất, ở trên phải là '... trong đó T: class, ILevelElement'. Trình biên dịch chokes vì ​​nó muốn từ khóa 'class' là đầu tiên. –

0

Dustin Campbell là đúng. Một giải pháp khác là trả lại default(T).

+0

oh. Tôi không thấy rằng anh ấy đã nói với bạn về từ khóa mặc định. Bỏ qua câu trả lời của tôi. –

Các vấn đề liên quan