2015-09-23 14 views
9

Tôi nhận được Lỗi:Một giá trị của loại '<null>' không thể được sử dụng như một tham số mặc định vì không có chuyển đổi tiêu chuẩn để gõ 'T'

A value of type '' cannot be used as a default parameter because there are no standard conversions to type 'T'

trong khi cố gắng viết đoạn mã này

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = null); 

Có ai có ý tưởng rằng cách tạo các loại giá trị không. Có anyway để làm điều này?

+1

'bảo vệ T GetValue (Biểu thức > thuộc tính, T mặc địnhValueIfNull = null) trong đó T: class' –

Trả lời

15

Không có ràng buộc nào đối với loại T, do đó, đây có thể là loại giá trị.
Bạn có thể viết lại định nghĩa phương pháp như

protected T GetValue<T>(Expression<Func<T>> property, T defaultValueIfNull = default(T)); 


nào sẽ có nghĩa null với nhiều loại tài liệu tham khảo và giá trị mặc định cho các loại giá trị.

+1

thực sự, nếu bạn không chuyển loại giá trị cho phương pháp này, sẽ tốt hơn để thêm ràng buộc vào phương thức hoặc (nếu loại T được định nghĩa bởi lớp) trên lớp. –

+0

Điều đó thực sự đã giúp tôi giải quyết vấn đề. :) tq –

7

T trong trường hợp này cũng có thể là loại giá trị, chẳng hạn như int, không thể là null. Bạn nên xác định một loại hạn chế, hạn chế T đến các lớp học:

...T defaultValueIfNull = null) where T : class 

Một thay thế sẽ được sử dụng ...T defaultValueIfNull = default(T)) - bạn sẽ không cần hạn chế, nhưng các loại giá trị sẽ trở thành 0 theo mặc định, thay vì null.

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