Một vài ngày trước tôi cần để chuyển đổi một bool, và tôi đã kết thúc làm như vậy:Sửa đổi ValueType từ phương thức mở rộng?
IsVisible = !IsVisible;
tôi thấy rằng là cách đơn giản nhất để lưu trữ functionaily đó. Nhưng trước khi làm như ví dụ trên, tôi đã thử một số cách khác nhau.
Chủ yếu là về cách sử dụng một phương pháp mở rộng. Điều nào trong ý kiến của tôi sẽ làm cho nó thậm chí đơn giản hơn, hoặc ít nhất là ít ký tự hơn để viết.
IsVisible.toggle();
Nhưng như một boolean là một loại giá trị, bool được gửi đến phương thức mở rộng là bản sao của bool gốc chứ không phải là loại tham chiếu.
public static void Toggle(this boolean value)
{
value = !value;
}
Trong đó sẽ làm những gì tôi cần, nhưng như boolean bị toggled là một bản sao của boolean gốc isnt thay đổi áp dụng với bản gốc ..
tôi đã cố gắng đặt trước mặt từ khóa ref của "boolean ", nhưng điều đó không biên dịch. Và tôi vẫn chưa tìm được lý do cho việc không biên dịch, đó không phải là chức năng hoàn hảo cho các phương pháp mở rộng?
public static void Toggle(this ref boolean value)
Tôi thậm chí đã thử boolean vào một đối tượng, mà trong đầu của tôi sẽ biến nó thành một loại tham chiếu, và sau đó nó sẽ không còn là một bản sao và thay đổi sẽ được trả lại. Điều đó không có tác dụng.
Vì vậy, câu hỏi của tôi là nếu nó có thể làm cho một phần mở rộng vượt qua thay đổi trở lại, hoặc một cách khác để làm cho nó thậm chí còn đơn giản hơn nó đã?
Tôi biết điều đó hoàn toàn có thể sẽ không nhận được bất kỳ đơn giản hơn hoặc logic hơn ví dụ hàng đầu, nhưng bạn không bao giờ biết :)
Cảm ơn trước.
Làm cho đơn giản nhất có thể, nhưng không đơn giản hơn. -Einstein –
btw, phương pháp mở rộng phải tĩnh. Tôi đoán họ đang ở trong bạn mã, bạn chỉ quên để làm cho họ tĩnh ở đây – abatishchev
Vâng sai lầm của tôi :) – Moulde