Việc triển khai Enumerable.AsEnumerable<T>(this IEnumerable<T> source)
chỉ cần trả lại source
. Tuy nhiên Observable.AsObservable<T>(this IObservable<T> source)
trả lại một AnonymousObservable<T>
đăng ký nguồn thay vì chỉ trả về nguồn.Tại sao AsObservable và AsEnumerable được thực hiện khác?
Tôi hiểu các phương pháp này thực sự hữu ích cho việc thay đổi đơn nguyên trong một truy vấn đơn (chuyển từ IQueryable => IEnumerable). Vậy tại sao việc triển khai lại khác nhau?
Phiên bản Observable
bảo vệ hơn, trong đó bạn không thể truyền sang một số loại đã biết (nếu bản gốc được triển khai dưới dạng Subject<T>
bạn không bao giờ có thể truyền như vậy). Vậy tại sao phiên bản Enumerable
không làm điều gì đó tương tự? Nếu loại cơ bản của tôi là List<T>
nhưng hiển thị nó là IEnumerable<T>
đến AsEnumerable
, bạn có thể quay lại List<T>
. Xin lưu ý rằng đây không phải là câu hỏi về cách phơi bày IEnumerable<T>
mà không có khả năng truyền đến cơ sở, nhưng tại sao việc triển khai giữa Enumerable
và Observable
khác nhau về mặt ngữ nghĩa.
Cảm ơn bạn đã giải thích. Gần đây tôi đã xem một video trên Kênh 9 với Bart De Smet, nơi ông giải thích IQbservable và nó liên quan đến IObservable. Từ cách ông giải thích, nó có vẻ như AsObservable là tương tự như AsEnumerable trong đó bất kỳ hành động quan sát sẽ xảy ra tại địa phương hơn là từ xa. Tôi đã hoàn toàn hiểu nhầm điều này (có lẽ ...), hay chỉ đơn giản là một cách sử dụng khác cho AsObservable? – RichK
Tôi không biết. Tôi khuyên bạn nên hỏi Bart de Smet câu hỏi đó. –
Ok cảm ơn, có lẽ là một ý tưởng hay. Tôi đã đọc tài liệu trước khi hỏi - nhưng sự nhầm lẫn là kết quả của video được đề cập trong bình luận trước của tôi – RichK