Show / Hide Table of Contents

Interface ISingleResultOpt<T>

Generic type for results of a single-element filter operation which represents a result count of zero, one, or more than one element.

Inherited Members
IOpt<T>.ResolveOption<TResult>(Func<Boolean, T, TResult>)
IEnumerable<T>.GetEnumerator()
ISingleResultOpt.ResolveUntypedSingleResultOption<TResult>(Func<Boolean, Boolean, Object, TResult>)
IOpt.ResolveUntypedOption<TResult>(Func<Boolean, Object, TResult>)
Namespace: Hgk.Zero.Options
Assembly: Hgk.Zero.Options.dll
Syntax
public interface ISingleResultOpt<out T> : IOpt<T>, IEnumerable<T>, ISingleResultOpt, IOpt, IEnumerable
Type Parameters
Name Description
T

The type of value that may be contained in this option.

Remarks

ISingleResultOpt<T> is the type returned by the single-element filter operations WhereSingle<TSource>(IEnumerable<TSource>) and WhereSingle<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>). If such an operation finds zero elements or one element, a single-result option behaves the same as an ordinary IOpt<T>. However, if such an operation finds more than one element, it behaves differently:

  • Resolving a single-result option as an ordinary option ( IOpt or IOpt<T>) or enumerable ( IEnumerable or IEnumerable<T>) will result in an InvalidOperationException. Operations that resolve immediately (such as a langword_csharp_foreach loop, ResolveOption<TResult>(Func<Boolean, T, TResult>), or Fix<TSource>(IOpt<TSource>)) will cause the exception to be thrown immediately, while deferred operations (such as Select<TSource, TResult>(IOpt<TSource>, Func<TSource, TResult>)) will cause the exception to be thrown when they are resolved themselves.
  • Explicit operations such as ResolveSingleResultOption<TResult>(Func<Boolean, Boolean, T, TResult>) and methods from SingleResultOpt such as EmptyIfMoreThanOne<TSource>(ISingleResultOpt<TSource>) can be used to convert a single-result option to another kind of value without throwing an exception.

The following is information about the contract for this interface.

  • The interface ISingleResultOpt must be implemented as specified.
  • ResolveSingleResultOption<TResult>(Func<Boolean, Boolean, T, TResult>) must be implemented as specified.
  • ISingleResultOpt<T> implements IEnumerable and IEnumerable<T>. The contract of this interface requires that the enumerator returned from GetEnumerator() and GetEnumerator() behave as follows:
    • If the operation produced no elements, the enumeration produces zero elements.
    • If the operation produced one element, the enumeration produces that one element.
    • If the operation produced more than one element, the enumeration throws InvalidOperationException instead of producing any elements. (The throwing of the exception should be deferred to the first MoveNext() rather than occurring immediately.)

    Behavior is undefined if the enumerable produces more than one value.

Methods

| Improve this Doc View Source

ResolveSingleResultOption<TResult>(Func<Boolean, Boolean, T, TResult>)

Resolves the contents of this single result option, producing a result using the specified result selector.

Declaration
TResult ResolveSingleResultOption<TResult>(Func<bool, bool, T, TResult> resultSelector)
Parameters
Type Name Description
Func<Boolean, Boolean, T, TResult> resultSelector

A transform function that accepts an is-valid-option flag, a has-value flag, and a value.

Returns
Type Description
TResult

The result of calling resultSelector on the current resolved state of this single result option.

Type Parameters
Name Description
TResult

The return type of resultSelector.

Remarks

The resolver function accepts three parameters: An is-valid-option flag, a has-value flag, and a value.

  • If this single result option represents one result, the is-valid-option flag and has-value flag are true and the value parameter is the result value.
  • If this single result option represents zero results, the is-valid-option flag is true, the has-value flag is false, and the value parameter is undefined.
  • If this single result option represents more than one result (and is thus not a valid option), the is-valid-option flag is false and the remaining parameters are undefined.

If the has-value flag or the value parameter is undefined, the caller must not use their values. To prevent accidental misuse, the implementation should supply false or langword_csharp_default( T), respectively, but this is not required.

Exceptions
Type Condition
ArgumentNullException

resultSelector is null.

Extension Methods

EnumerableToString.ConcatToString<T>(IEnumerable<T>)
EnumerableToString.JoinToString<T>(IEnumerable<T>, String)
SingleResultOpt.DefaultIfMoreThanOne<TSource>(ISingleResultOpt<TSource>, TSource)
SingleResultOpt.DefaultIfMoreThanOne<TSource>(ISingleResultOpt<TSource>)
SingleResultOpt.EmptyIfMoreThanOne<TSource>(ISingleResultOpt<TSource>)
SingleResultOpt.ForceSingleResultOpt<TSource>(ISingleResultOpt<TSource>)
SingleResultOpt.ForceSingleResultOpt(ISingleResultOpt)
SingleResultOpt.Match<TSource, TResult>(ISingleResultOpt<TSource>, Func<TResult>, Func<TSource, TResult>, Func<TResult>)
SingleResultOpt.MatchOpt<TSource, TResult>(ISingleResultOpt<TSource>, Func<Opt<TResult>>, Func<TSource, Opt<TResult>>, Func<Opt<TResult>>)
SingleResultOpt.ReplaceIfMoreThanOne<TSource>(ISingleResultOpt<TSource>, Func<IOpt<TSource>>)
SingleResultOpt.ReplaceIfMoreThanOne<TSource>(ISingleResultOpt<TSource>, IOpt<TSource>)
EnumerableToOpt.WhereElementAt<TSource>(IEnumerable<TSource>, Int32)
EnumerableToOpt.WhereFirst<TSource>(IEnumerable<TSource>)
EnumerableToOpt.WhereFirst<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)
EnumerableToOpt.WhereLast<TSource>(IEnumerable<TSource>)
EnumerableToOpt.WhereLast<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)
EnumerableToOpt.WhereSingle<TSource>(IEnumerable<TSource>)
EnumerableToOpt.WhereSingle<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)
LinqToOpt.AsIOpt<TSource>(IOpt<TSource>)
LinqToOpt.Contains<TSource>(IOpt<TSource>, TSource)
LinqToOpt.Contains<TSource>(IOpt<TSource>, TSource, IEqualityComparer<TSource>)
LinqToOpt.Distinct<TSource>(IOpt<TSource>)
LinqToOpt.Distinct<TSource>(IOpt<TSource>, IEqualityComparer<TSource>)
LinqToOpt.Reverse<TSource>(IOpt<TSource>)
LinqToOpt.ToArray<TSource>(IOpt<TSource>)
LinqToOpt.ToFixed<TSource>(IOpt<TSource>)
LinqToOpt.ToFixed(IOpt)
LinqToOpt.ToList<TSource>(IOpt<TSource>)
LinqToOpt.TryGetValue<TSource>(IOpt<TSource>, out TSource)
LinqToOpt.Aggregate<TSource>(IOpt<TSource>, Func<TSource, TSource, TSource>)
LinqToOpt.Aggregate<TSource, TAccumulate>(IOpt<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>)
LinqToOpt.Aggregate<TSource, TAccumulate, TResult>(IOpt<TSource>, TAccumulate, Func<TAccumulate, TSource, TAccumulate>, Func<TAccumulate, TResult>)
LinqToOpt.All<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.Any<TSource>(IOpt<TSource>)
LinqToOpt.Any<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.Count<TSource>(IOpt<TSource>)
LinqToOpt.Count<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.LongCount<TSource>(IOpt<TSource>)
LinqToOpt.LongCount<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Int32>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int32>>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Int64>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int64>>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Single>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Nullable<Single>>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Double>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Nullable<Double>>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Decimal>)
LinqToOpt.Average<TSource>(IOpt<TSource>, Func<TSource, Nullable<Decimal>>)
LinqToOpt.Cast<TResult>(IOpt)
LinqToOpt.OfType<TResult>(IOpt)
LinqToOpt.Except<TSource>(IOpt<TSource>, IEnumerable<TSource>)
LinqToOpt.Except<TSource>(IOpt<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)
LinqToOpt.Intersect<TSource>(IOpt<TSource>, IEnumerable<TSource>)
LinqToOpt.Intersect<TSource>(IOpt<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)
LinqToOpt.GroupBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>)
LinqToOpt.GroupBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>, IEqualityComparer<TKey>)
LinqToOpt.GroupBy<TSource, TKey, TElement>(IOpt<TSource>, Func<TSource, TKey>, Func<TSource, TElement>)
LinqToOpt.GroupBy<TSource, TKey, TElement>(IOpt<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, IEqualityComparer<TKey>)
LinqToOpt.GroupBy<TSource, TKey, TResult>(IOpt<TSource>, Func<TSource, TKey>, Func<TKey, IOpt<TSource>, TResult>)
LinqToOpt.GroupBy<TSource, TKey, TResult>(IOpt<TSource>, Func<TSource, TKey>, Func<TKey, IOpt<TSource>, TResult>, IEqualityComparer<TKey>)
LinqToOpt.GroupBy<TSource, TKey, TElement, TResult>(IOpt<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, Func<TKey, IOpt<TElement>, TResult>)
LinqToOpt.GroupBy<TSource, TKey, TElement, TResult>(IOpt<TSource>, Func<TSource, TKey>, Func<TSource, TElement>, Func<TKey, IOpt<TElement>, TResult>, IEqualityComparer<TKey>)
LinqToOpt.GroupJoin<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, IEnumerable<TInner>, TResult>)
LinqToOpt.GroupJoin<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IEnumerable<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, IEnumerable<TInner>, TResult>, IEqualityComparer<TKey>)
LinqToOpt.GroupJoin<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IOpt<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, IOpt<TInner>, TResult>)
LinqToOpt.GroupJoin<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IOpt<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, IOpt<TInner>, TResult>, IEqualityComparer<TKey>)
LinqToOpt.DefaultIfEmpty<TSource>(IOpt<TSource>)
LinqToOpt.DefaultIfEmpty<TSource>(IOpt<TSource>, TSource)
LinqToOpt.ReplaceIfEmpty<TSource>(IOpt<TSource>, Func<IOpt<TSource>>)
LinqToOpt.ReplaceIfEmpty<TSource>(IOpt<TSource>, IOpt<TSource>)
LinqToOpt.Join<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IOpt<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>)
LinqToOpt.Join<TOuter, TInner, TKey, TResult>(IOpt<TOuter>, IOpt<TInner>, Func<TOuter, TKey>, Func<TInner, TKey>, Func<TOuter, TInner, TResult>, IEqualityComparer<TKey>)
LinqToOpt.Match<TSource, TResult>(IOpt<TSource>, Func<TResult>, Func<TSource, TResult>)
LinqToOpt.MatchOpt<TSource, TResult>(IOpt<TSource>, Func<Opt<TResult>>, Func<TSource, Opt<TResult>>)
LinqToOpt.Max<TSource>(IOpt<TSource>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Int32>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int32>>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Int64>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int64>>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Single>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Nullable<Single>>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Double>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Nullable<Double>>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Decimal>)
LinqToOpt.Max<TSource>(IOpt<TSource>, Func<TSource, Nullable<Decimal>>)
LinqToOpt.Max<TSource, TResult>(IOpt<TSource>, Func<TSource, TResult>)
LinqToOpt.Min<TSource>(IOpt<TSource>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Int32>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int32>>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Int64>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int64>>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Single>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Nullable<Single>>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Double>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Nullable<Double>>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Decimal>)
LinqToOpt.Min<TSource>(IOpt<TSource>, Func<TSource, Nullable<Decimal>>)
LinqToOpt.Min<TSource, TResult>(IOpt<TSource>, Func<TSource, TResult>)
LinqToOpt.OrderBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>)
LinqToOpt.OrderBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>, IComparer<TKey>)
LinqToOpt.OrderByDescending<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>)
LinqToOpt.OrderByDescending<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>, IComparer<TKey>)
LinqToOpt.ThenBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>)
LinqToOpt.ThenBy<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>, IComparer<TKey>)
LinqToOpt.ThenByDescending<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>)
LinqToOpt.ThenByDescending<TSource, TKey>(IOpt<TSource>, Func<TSource, TKey>, IComparer<TKey>)
LinqToOpt.Select<TSource, TResult>(IOpt<TSource>, Func<TSource, TResult>)
LinqToOpt.Select<TSource, TResult>(IOpt<TSource>, Func<TSource, Int32, TResult>)
LinqToOpt.SelectMany<TSource, TResult>(IOpt<TSource>, Func<TSource, IOpt<TResult>>)
LinqToOpt.SelectMany<TSource, TResult>(IOpt<TSource>, Func<TSource, Int32, IOpt<TResult>>)
LinqToOpt.SelectMany<TSource, TCollection, TResult>(IOpt<TSource>, Func<TSource, IOpt<TCollection>>, Func<TSource, TCollection, TResult>)
LinqToOpt.SelectMany<TSource, TCollection, TResult>(IOpt<TSource>, Func<TSource, Int32, IOpt<TCollection>>, Func<TSource, TCollection, TResult>)
LinqToOpt.SequenceEqual<TSource>(IOpt<TSource>, IEnumerable<TSource>)
LinqToOpt.SequenceEqual<TSource>(IOpt<TSource>, IEnumerable<TSource>, IEqualityComparer<TSource>)
LinqToOpt.ElementAt<TSource>(IOpt<TSource>, Int32)
LinqToOpt.ElementAtOrDefault<TSource>(IOpt<TSource>, Int32)
LinqToOpt.ElementAtOrDefault<TSource>(IOpt<TSource>, Int32, TSource)
LinqToOpt.First<TSource>(IOpt<TSource>)
LinqToOpt.First<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.FirstOrDefault<TSource>(IOpt<TSource>)
LinqToOpt.FirstOrDefault<TSource>(IOpt<TSource>, TSource)
LinqToOpt.FirstOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.FirstOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>, TSource)
LinqToOpt.Last<TSource>(IOpt<TSource>)
LinqToOpt.Last<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.LastOrDefault<TSource>(IOpt<TSource>)
LinqToOpt.LastOrDefault<TSource>(IOpt<TSource>, TSource)
LinqToOpt.LastOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.LastOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>, TSource)
LinqToOpt.Single<TSource>(IOpt<TSource>)
LinqToOpt.Single<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.SingleOrDefault<TSource>(IOpt<TSource>)
LinqToOpt.SingleOrDefault<TSource>(IOpt<TSource>, TSource)
LinqToOpt.SingleOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.SingleOrDefault<TSource>(IOpt<TSource>, Func<TSource, Boolean>, TSource)
LinqToOpt.Skip<TSource>(IOpt<TSource>, Int32)
LinqToOpt.SkipWhile<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.SkipWhile<TSource>(IOpt<TSource>, Func<TSource, Int32, Boolean>)
LinqToOpt.Take<TSource>(IOpt<TSource>, Int32)
LinqToOpt.TakeWhile<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.TakeWhile<TSource>(IOpt<TSource>, Func<TSource, Int32, Boolean>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Int32>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int32>>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Int64>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Nullable<Int64>>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Single>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Nullable<Single>>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Double>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Nullable<Double>>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Decimal>)
LinqToOpt.Sum<TSource>(IOpt<TSource>, Func<TSource, Nullable<Decimal>>)
LinqToOpt.Where<TSource>(IOpt<TSource>, Func<TSource, Boolean>)
LinqToOpt.Where<TSource>(IOpt<TSource>, Func<TSource, Int32, Boolean>)
LinqToOpt.WhereNotNull<TSource>(IOpt<TSource>)
LinqToOpt.Zip<TFirst, TSecond, TResult>(IOpt<TFirst>, IEnumerable<TSecond>, Func<TFirst, TSecond, TResult>)

See Also

ISingleResultOpt
WhereSingle<TSource>(IEnumerable<TSource>)
WhereSingle<TSource>(IEnumerable<TSource>, Func<TSource, Boolean>)
  • Improve this Doc
  • View Source
Back to top Copyright © 2018-2019 Peter S. May
Generated by DocFX