浏览代码

LastOrDefaultAsync

Daniel Weber 5 年之前
父节点
当前提交
2d2e0b777a

+ 2 - 2
Rx.NET/Source/src/System.Reactive/Linq/IQueryLanguage.cs

@@ -59,8 +59,8 @@ namespace System.Reactive.Linq
         IObservable<bool> IsEmpty<TSource>(IObservable<TSource> source);
         IObservable<TSource> LastAsync<TSource>(IObservable<TSource> source);
         IObservable<TSource> LastAsync<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate);
-        IObservable<TSource> LastOrDefaultAsync<TSource>(IObservable<TSource> source);
-        IObservable<TSource> LastOrDefaultAsync<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate);
+        IObservable<TSource?> LastOrDefaultAsync<TSource>(IObservable<TSource> source);
+        IObservable<TSource?> LastOrDefaultAsync<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate);
         IObservable<long> LongCount<TSource>(IObservable<TSource> source);
         IObservable<long> LongCount<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate);
         IObservable<TSource> Max<TSource>(IObservable<TSource> source);

+ 2 - 2
Rx.NET/Source/src/System.Reactive/Linq/Observable.Aggregates.cs

@@ -938,7 +938,7 @@ namespace System.Reactive.Linq
         /// <param name="source">Source observable sequence.</param>
         /// <returns>Sequence containing the last element in the observable sequence, or a default value if no such element exists.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> is null.</exception>
-        public static IObservable<TSource> LastOrDefaultAsync<TSource>(this IObservable<TSource> source)
+        public static IObservable<TSource?> LastOrDefaultAsync<TSource>(this IObservable<TSource> source)
         {
             if (source == null)
             {
@@ -956,7 +956,7 @@ namespace System.Reactive.Linq
         /// <param name="predicate">A predicate function to evaluate for elements in the source sequence.</param>
         /// <returns>Sequence containing the last element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.</returns>
         /// <exception cref="ArgumentNullException"><paramref name="source"/> or <paramref name="predicate"/> is null.</exception>
-        public static IObservable<TSource> LastOrDefaultAsync<TSource>(this IObservable<TSource> source, Func<TSource, bool> predicate)
+        public static IObservable<TSource?> LastOrDefaultAsync<TSource>(this IObservable<TSource> source, Func<TSource, bool> predicate)
         {
             if (source == null)
             {

+ 10 - 10
Rx.NET/Source/src/System.Reactive/Linq/Observable/LastOrDefaultAsync.cs

@@ -6,7 +6,7 @@ namespace System.Reactive.Linq.ObservableImpl
 {
     internal static class LastOrDefaultAsync<TSource>
     {
-        internal sealed class Sequence : Producer<TSource, Sequence._>
+        internal sealed class Sequence : Producer<TSource?, Sequence._>
         {
             private readonly IObservable<TSource> _source;
 
@@ -15,15 +15,15 @@ namespace System.Reactive.Linq.ObservableImpl
                 _source = source;
             }
 
-            protected override _ CreateSink(IObserver<TSource> observer) => new _(observer);
+            protected override _ CreateSink(IObserver<TSource?> observer) => new _(observer);
 
             protected override void Run(_ sink) => sink.Run(_source);
 
-            internal sealed class _ : IdentitySink<TSource>
+            internal sealed class _ : Sink<TSource, TSource?>
             {
                 private TSource? _value;
 
-                public _(IObserver<TSource> observer)
+                public _(IObserver<TSource?> observer)
                     : base(observer)
                 {
 
@@ -42,7 +42,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
                 public override void OnCompleted()
                 {
-                    var value = _value!;
+                    var value = _value;
                     _value = default;
                     ForwardOnNext(value);
                     ForwardOnCompleted();
@@ -50,7 +50,7 @@ namespace System.Reactive.Linq.ObservableImpl
             }
         }
 
-        internal sealed class Predicate : Producer<TSource, Predicate._>
+        internal sealed class Predicate : Producer<TSource?, Predicate._>
         {
             private readonly IObservable<TSource> _source;
             private readonly Func<TSource, bool> _predicate;
@@ -61,16 +61,16 @@ namespace System.Reactive.Linq.ObservableImpl
                 _predicate = predicate;
             }
 
-            protected override _ CreateSink(IObserver<TSource> observer) => new _(_predicate, observer);
+            protected override _ CreateSink(IObserver<TSource?> observer) => new _(_predicate, observer);
 
             protected override void Run(_ sink) => sink.Run(_source);
 
-            internal sealed class _ : IdentitySink<TSource>
+            internal sealed class _ : Sink<TSource, TSource?>
             {
                 private readonly Func<TSource, bool> _predicate;
                 private TSource? _value;
 
-                public _(Func<TSource, bool> predicate, IObserver<TSource> observer)
+                public _(Func<TSource, bool> predicate, IObserver<TSource?> observer)
                     : base(observer)
                 {
                     _predicate = predicate;
@@ -105,7 +105,7 @@ namespace System.Reactive.Linq.ObservableImpl
 
                 public override void OnCompleted()
                 {
-                    var value = _value!;
+                    var value = _value;
                     _value = default;
                     ForwardOnNext(value);
                     ForwardOnCompleted();

+ 2 - 2
Rx.NET/Source/src/System.Reactive/Linq/Qbservable.Generated.cs

@@ -8188,7 +8188,7 @@ namespace System.Reactive.Linq
         /// <returns>Sequence containing the last element in the observable sequence, or a default value if no such element exists.</returns>
         /// <exception cref="ArgumentNullException">
         /// <paramref name="source" /> is null.</exception>
-        public static IQbservable<TSource> LastOrDefaultAsync<TSource>(this IQbservable<TSource> source)
+        public static IQbservable<TSource?> LastOrDefaultAsync<TSource>(this IQbservable<TSource> source)
         {
             if (source == null)
                 throw new ArgumentNullException(nameof(source));
@@ -8215,7 +8215,7 @@ namespace System.Reactive.Linq
         /// <returns>Sequence containing the last element in the observable sequence that satisfies the condition in the predicate, or a default value if no such element exists.</returns>
         /// <exception cref="ArgumentNullException">
         /// <paramref name="source" /> or <paramref name="predicate" /> is null.</exception>
-        public static IQbservable<TSource> LastOrDefaultAsync<TSource>(this IQbservable<TSource> source, Expression<Func<TSource, bool>> predicate)
+        public static IQbservable<TSource?> LastOrDefaultAsync<TSource>(this IQbservable<TSource> source, Expression<Func<TSource, bool>> predicate)
         {
             if (source == null)
                 throw new ArgumentNullException(nameof(source));

+ 2 - 2
Rx.NET/Source/src/System.Reactive/Linq/QueryLanguage.Aggregates.cs

@@ -256,12 +256,12 @@ namespace System.Reactive.Linq
 
         #region + LastOrDefaultAsync +
 
-        public virtual IObservable<TSource> LastOrDefaultAsync<TSource>(IObservable<TSource> source)
+        public virtual IObservable<TSource?> LastOrDefaultAsync<TSource>(IObservable<TSource> source)
         {
             return new LastOrDefaultAsync<TSource>.Sequence(source);
         }
 
-        public virtual IObservable<TSource> LastOrDefaultAsync<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate)
+        public virtual IObservable<TSource?> LastOrDefaultAsync<TSource>(IObservable<TSource> source, Func<TSource, bool> predicate)
         {
             return new LastOrDefaultAsync<TSource>.Predicate(source, predicate);
         }

+ 4 - 4
Rx.NET/Source/tests/Tests.System.Reactive.ApiApprovals/Api/ApiApprovalTests.Core.verified.cs

@@ -1190,8 +1190,8 @@ namespace System.Reactive.Linq
         [System.Obsolete(@"This blocking operation is no longer supported. Instead, use the async version in combination with C# and Visual Basic async/await support. In case you need a blocking operation, use Wait or convert the resulting observable sequence to a Task object and block.")]
         [return: System.Diagnostics.CodeAnalysis.MaybeNull]
         public static TSource LastOrDefault<TSource>(this System.IObservable<TSource> source, System.Func<TSource, bool> predicate) { }
-        public static System.IObservable<TSource> LastOrDefaultAsync<TSource>(this System.IObservable<TSource> source) { }
-        public static System.IObservable<TSource> LastOrDefaultAsync<TSource>(this System.IObservable<TSource> source, System.Func<TSource, bool> predicate) { }
+        public static System.IObservable<TSource?> LastOrDefaultAsync<TSource>(this System.IObservable<TSource> source) { }
+        public static System.IObservable<TSource?> LastOrDefaultAsync<TSource>(this System.IObservable<TSource> source, System.Func<TSource, bool> predicate) { }
         public static System.Collections.Generic.IEnumerable<TSource> Latest<TSource>(this System.IObservable<TSource> source) { }
         public static System.IObservable<long> LongCount<TSource>(this System.IObservable<TSource> source) { }
         public static System.IObservable<long> LongCount<TSource>(this System.IObservable<TSource> source, System.Func<TSource, bool> predicate) { }
@@ -2038,8 +2038,8 @@ namespace System.Reactive.Linq
         public static System.Reactive.Linq.IQbservable<TResult> Join<TLeft, TRight, TLeftDuration, TRightDuration, TResult>(this System.Reactive.Linq.IQbservable<TLeft> left, System.IObservable<TRight> right, System.Linq.Expressions.Expression<System.Func<TLeft, System.IObservable<TLeftDuration>>> leftDurationSelector, System.Linq.Expressions.Expression<System.Func<TRight, System.IObservable<TRightDuration>>> rightDurationSelector, System.Linq.Expressions.Expression<System.Func<TLeft, TRight, TResult>> resultSelector) { }
         public static System.Reactive.Linq.IQbservable<TSource> LastAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source) { }
         public static System.Reactive.Linq.IQbservable<TSource> LastAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source, System.Linq.Expressions.Expression<System.Func<TSource, bool>> predicate) { }
-        public static System.Reactive.Linq.IQbservable<TSource> LastOrDefaultAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source) { }
-        public static System.Reactive.Linq.IQbservable<TSource> LastOrDefaultAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source, System.Linq.Expressions.Expression<System.Func<TSource, bool>> predicate) { }
+        public static System.Reactive.Linq.IQbservable<TSource?> LastOrDefaultAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source) { }
+        public static System.Reactive.Linq.IQbservable<TSource?> LastOrDefaultAsync<TSource>(this System.Reactive.Linq.IQbservable<TSource> source, System.Linq.Expressions.Expression<System.Func<TSource, bool>> predicate) { }
         public static System.Linq.IQueryable<TSource> Latest<TSource>(this System.Reactive.Linq.IQbservable<TSource> source) { }
         public static System.Reactive.Linq.IQbservable<long> LongCount<TSource>(this System.Reactive.Linq.IQbservable<TSource> source) { }
         public static System.Reactive.Linq.IQbservable<long> LongCount<TSource>(this System.Reactive.Linq.IQbservable<TSource> source, System.Linq.Expressions.Expression<System.Func<TSource, bool>> predicate) { }