File: System\Activities\Core\Presentation\GenericTypeArgumentConverter.cs
Project: ndp\cdf\src\NetFx40\Tools\System.Activities.Core.Presentation\System.Activities.Core.Presentation.csproj (System.Activities.Core.Presentation)
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation.  All rights reserved.
//------------------------------------------------------------
 
namespace System.Activities.Core.Presentation
{
    using System.Windows.Data;
    using System.Runtime;
    using System.Globalization;
 
    public sealed class GenericTypeArgumentConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            Fx.Assert(targetType == typeof(Type), "GenericTypeArgumentConverter is expected to be a Type to Type converter with an integer parameter");
            Fx.Assert(value is Type, "GenericTypeArgumentConverter is expected to be a Type to Type converter with an integer parameter");
            Type source = value as Type;
            return source.GetGenericArguments()[Int32.Parse(parameter.ToString(), culture)];
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            // It is theoretically impossible to convert from a generic type argument back to its original type.
            throw FxTrace.Exception.AsError(new NotSupportedException());
        }
    }
}