2010-01-06 30 views
5

tôi có chức năng nàyVấn đề với chuyển đổi ngầm và null

public static implicit operator MyClass(string v) { return new MyClass(v); } 

và viết var.myclass = null ;. Điều này gọi toán tử ngầm và chuyển null thành chuỗi, gây ra sự phá hoại trong mã của tôi (tôi sử dụng sự phản chiếu và không muốn thêm một trường hợp đặc biệt). Làm thế nào tôi có thể viết myclass = null mà không gây ra các nhà điều hành tiềm ẩn?

Tôi cố gắng viết

public static implicit operator MyClass(string v) { return v == null ? null : new MyClass(v); } 

Nhưng điều đó gây ra một stackoverflow

+4

Cấu trúc MyClass có phải là cấu trúc không? Đối số của bạn tạo ra đối số nào? – SLaks

+0

Thay vào đó, bạn có thể viết nó làm nhà điều hành không? –

+0

Tôi không thể tái tạo sự cố của bạn; bạn có thể có cái gì khác sai. – SLaks

Trả lời

5

Tôi tin rằng vấn đề của bạn là cả hai bên của các nhà điều hành ternary phải có cùng loại hoặc tương thích.

Cố gắng viết

if (v == null) 
    return null; 
else 
    return new MyClass(v); 

EDIT: Tôi chỉ có thể tạo lại vấn đề của bạn nếu tôi làm MyClass một cấu trúc, trong trường hợp này câu hỏi của bạn là không thể; cấu trúc không thể là rỗng.

Vui lòng cung cấp thêm chi tiết.

+0

Bạn đang nghĩ đến một lỗi thời gian biên dịch, lỗi này sẽ được sửa bằng cách thay đổi nó thành: return v == null? (MyClass) null: MyClass mới (v); Rác ngăn xếp có khả năng sẽ là lỗi thời gian chạy, nơi nó gọi toán tử ẩn theo đệ quy. –

+2

Đó là một diễn viên ngầm - trình biên dịch sẽ tự động chèn '(MyClass)' – SLaks

+0

Đó là một cấu trúc. oops. –

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