Tôi đang tìm cách chuyển đổi một bộ sưu tập IEnumerable thành một bộ sưu tập IObservable mà không sử dụng các phương thức Rx ToObservable() và ToEnumerable().làm thế nào để chuyển đổi IEnumerable sang IObservable?
Trả lời
Câu trả lời đơn giản - sử dụng ToObservable
. Đó là những gì nó cho.
"Trả lời câu hỏi thực tế" câu trả lời - bạn có thể tránh sử dụng Subjects
qua Observable.Create
:
void Main()
{
var src = Enumerable.Range(0, 10);
var observable = Observable.Create<int>(obs =>
{
foreach(var item in src)
{
obs.OnNext(item);
}
return Disposable.Create(()=>{});
});
using(observable.Subscribe(Console.WriteLine))
{
Console.ReadLine();
}
}
Output:
0
1
2
3
4
5
6
7
8
9
Là' Disposable.Create (() => {}); 'khác với' Disposable.Empty'? – interlude
@interlude Không thực sự, tôi chỉ sử dụng quá tải để có thể thêm logic dọn dẹp nếu cần. – JerKimball
Nếu ta có một IEnumerable
không rõ loại, có hai cách một có thể "chuyển đổi nó thành IObservable":
Sao chép tất cả dữ liệu trong đối tượng vào một bộ sưu tập mới thực hiện
IObservable
. Nếu việc này được thực hiện, chỉ những thay đổi được thực hiện cho bộ sưu tập mới sẽ được báo cáo. Những thay đổi được thực hiện cho bản gốc sẽ không.Tạo đối tượng mới định kỳ sẽ chụp nhanh nội dung của số
IEnumerable
; sau khi chụp từng ảnh chụp, hãy báo cáo tất cả các thay đổi sẽ được thực hiện đối với ảnh chụp nhanh trước đó để làm cho ảnh chụp nhanh khớp với ảnh chụp mới. Sử dụng phương pháp này, những thay đổi được thực hiện cho đối tượng ban đầu sẽ được quan sát, cuối cùng, nhưng thật khó để cung cấp thông báo cập nhật kịp thời mà không lãng phí nhiều thời gian đọc lại bộ sưu tập khi không có gì thay đổi.
Có một số lần khi người ta cần phải có IObservable
ràng buộc với đối tượng gốc IEnumerable
, chứ không phải là một đối tượng mới đó là điền sẵn với một bản sao của dữ liệu; trong những trường hợp như vậy, cách tiếp cận thứ hai có thể là cần thiết. Tuy nhiên, thường sẽ không thể làm cho tỷ lệ bỏ phiếu đủ nhanh để cung cấp cập nhật kịp thời mà không gây ra tải hệ thống không được chấp nhận trừ khi bộ sưu tập gốc hỗ trợ các tính năng không có sẵn trong một tùy ý IEnumerable
. Hơn nữa, nếu người ta không áp đặt các yêu cầu về loại IEnumerable
, người ta có thể sẽ phải đặt ra các hạn chế về ngữ cảnh luồng mà nó có thể được cập nhật.
- 1. Chuyển đổi IEnumerable sang DataTable
- 2. Làm thế nào để chuyển đổi một IEnumerable <Task<T>> để IObservable <T>
- 3. Chuyển đổi từ IEnumerable sang Danh sách
- 4. Làm thế nào để chuyển đổi IEnumerable thành ObservableCollection?
- 5. Làm thế nào để IEnumerable khác với IObservable dưới mui xe?
- 6. Làm thế nào để chuyển đổi một IEnumerable <IEnumerable <T>> thành IEnumerable <T>
- 7. Chuyển đổi IEnumerable <T> sang IList
- 8. Làm thế nào để chuyển đổi char * sang std :: vector?
- 9. Làm thế nào để chuyển đổi nsstring sang cString?
- 10. Làm thế nào để chuyển đổi ISO8859-15 sang UTF8?
- 11. Làm thế nào để chuyển đổi CSV sang Excel?
- 12. làm thế nào để chuyển đổi nsstring sang uicolor?
- 13. Làm thế nào để chuyển đổi BigInteger sang BigDecimal?
- 14. Làm thế nào để chuyển đổi CGFontRef sang UIFont?
- 15. Làm thế nào để chuyển đổi dispatch_data_t sang NSData?
- 16. Làm thế nào để chuyển đổi typedef enum sang NSNumber?
- 17. Làm thế nào để chuyển đổi chm sang pdf
- 18. Làm thế nào để chuyển đổi HTML sang XHTML?
- 19. Làm thế nào để chuyển đổi Double.POSITIVE_INFINITY sang BigDecimal?
- 20. Làm thế nào để chuyển đổi hình ảnh sang html?
- 21. Làm thế nào để chuyển đổi char * sang BSTR?
- 22. Làm thế nào để chuyển đổi NSArray sang NSData?
- 23. Làm thế nào để chuyển đổi NSUrl sang NSString?
- 24. Làm thế nào để chuyển đổi CFStringRef sang NSString?
- 25. Làm thế nào để chuyển đổi CFArrayRef sang NSArray?
- 26. Làm thế nào để chuyển đổi char sang byte?
- 27. Android - làm thế nào để chuyển đổi html sang pdf?
- 28. Làm thế nào để bạn chuyển đổi IEnumerable <int> thành Int32
- 29. Chuyển đổi một phương pháp async trở IObservable <>
- 30. Làm thế nào để chuyển đổi mảng băm băm C# thành chuỗi để chuyển sang API?
Tại sao bạn không muốn sử dụng 'ToObservable()'? –
@DanielHilgarth Tôi thừa nhận, tôi cũng tò mò - đó là điểm của 'ToObservable() ' – JerKimball