2010-06-21 Atsushi Enomoto <atsushi@ximian.com>
[mcs.git] / class / System.ComponentModel.Composition / src / ComponentModel / System / ComponentModel / Composition / CompositionResultOfT.cs
bloba891a841360ba13f679061c889c87b53fe2f1f66
1 // -----------------------------------------------------------------------
2 // Copyright (c) Microsoft Corporation. All rights reserved.
3 // -----------------------------------------------------------------------
4 using System;
5 using System.Collections.Generic;
6 using System.Diagnostics.CodeAnalysis;
7 using System.Linq;
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;
35 this._value = value;
38 public bool Succeeded
40 get { return this._errors == null || !this._errors.FastAny(); }
43 public IEnumerable<CompositionError> Errors
45 get { return this._errors ?? Enumerable.Empty<CompositionError>(); }
48 /// <summary>
49 /// Gets the value from the result, throwing a CompositionException if there are any errors.
50 /// </summary>
51 public T Value
53 get
55 ThrowOnErrors();
57 return this._value;
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()
73 if (!this.Succeeded)
75 throw new CompositionException(this._errors);