1
// -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
5 using System
.Collections
.Generic
;
6 using System
.Diagnostics
.CodeAnalysis
;
8 using Microsoft
.Internal
.Collections
;
10 namespace System
.ComponentModel
.Composition
12 internal struct CompositionResult
<T
>
14 private readonly IEnumerable
<CompositionError
> _errors
;
15 private readonly T _value
;
17 public CompositionResult(T
value)
18 : this(value, (CompositionError
[])null)
22 public CompositionResult(params CompositionError
[] errors
)
23 : this(default(T
), (IEnumerable
<CompositionError
>)errors
)
27 public CompositionResult(IEnumerable
<CompositionError
> errors
)
28 : this(default(T
), errors
)
32 internal CompositionResult(T
value, IEnumerable
<CompositionError
> errors
)
34 this._errors
= errors
;
40 get { return this._errors == null || !this._errors.FastAny(); }
43 public IEnumerable
<CompositionError
> Errors
45 get { return this._errors ?? Enumerable.Empty<CompositionError>(); }
49 /// Gets the value from the result, throwing a CompositionException if there are any errors.
61 internal CompositionResult
<TValue
> ToResult
<TValue
>()
63 return new CompositionResult
<TValue
>(this._errors
);
66 internal CompositionResult
ToResult()
68 return new CompositionResult(this._errors
);
71 private void ThrowOnErrors()
75 throw new CompositionException(this._errors
);