| using Cysharp.Threading.Tasks.Internal; | 
| using System; | 
| using System.Threading; | 
|   | 
| namespace Cysharp.Threading.Tasks.Linq | 
| { | 
|     public static partial class UniTaskAsyncEnumerable | 
|     { | 
|         public static IUniTaskAsyncEnumerable<TResult> OfType<TResult>(this IUniTaskAsyncEnumerable<Object> source) | 
|         { | 
|             Error.ThrowArgumentNullException(source, nameof(source)); | 
|   | 
|             return new OfType<TResult>(source); | 
|         } | 
|     } | 
|   | 
|     internal sealed class OfType<TResult> : IUniTaskAsyncEnumerable<TResult> | 
|     { | 
|         readonly IUniTaskAsyncEnumerable<object> source; | 
|   | 
|         public OfType(IUniTaskAsyncEnumerable<object> source) | 
|         { | 
|             this.source = source; | 
|         } | 
|   | 
|         public IUniTaskAsyncEnumerator<TResult> GetAsyncEnumerator(CancellationToken cancellationToken = default) | 
|         { | 
|             return new _OfType(source, cancellationToken); | 
|         } | 
|   | 
|         class _OfType : AsyncEnumeratorBase<object, TResult> | 
|         { | 
|             public _OfType(IUniTaskAsyncEnumerable<object> source, CancellationToken cancellationToken) | 
|   | 
|                 : base(source, cancellationToken) | 
|             { | 
|             } | 
|   | 
|             protected override bool TryMoveNextCore(bool sourceHasCurrent, out bool result) | 
|             { | 
|                 if (sourceHasCurrent) | 
|                 { | 
|                     if (SourceCurrent is TResult castCurent) | 
|                     { | 
|                         Current = castCurent; | 
|                         result = true; | 
|                         return true; | 
|                     } | 
|                     else | 
|                     { | 
|                         result = default; | 
|                         return false; | 
|                     } | 
|                 } | 
|   | 
|                 result = false; | 
|                 return true; | 
|             } | 
|         } | 
|     } | 
| } |