C# 如何在IValueConverter中使用targetType参数?

C# 如何在IValueConverter中使用targetType参数?,c#,wpf,xaml,type-conversion,ivalueconverter,C#,Wpf,Xaml,Type Conversion,Ivalueconverter,我有一个IValueConverter,我想用它来做简单的数学运算,它有以下Convert功能: public object Convert( object value, Type targetType, object parameter, CultureInfo culture) { if (parameter == null) { return value;

我有一个
IValueConverter
,我想用它来做简单的数学运算,它有以下
Convert
功能:

public object Convert(
        object value,
        Type targetType,
        object parameter,
        CultureInfo culture)
    {
        if (parameter == null)
        {
            return value;
        }

        switch (((string)parameter).ToCharArray()[0])
        {
            case '%':
                return (double)value % double.Parse(
                    ((string)parameter).TrimStart(new char[] {'%'}));
            case '*':
                return (double)value * double.Parse(
                    ((string)parameter).TrimStart(new char[] {'*'}));
            case '/':
                return (double)value / double.Parse(
                    ((string)parameter).TrimStart(new char[] {'/'}));
            case '+':
                return (double)value + double.Parse(
                    ((string)parameter).TrimStart(new char[] {'+'}));
            case '-':
                if (((string)parameter).Length > 1)
                {
                    return (double)value - double.Parse(
                        ((string)parameter).TrimStart(new char[] {'-'}));
                }
                else
                {
                    return (double)value * -1.0D;
                }
            default:
                return DependencyProperty.UnsetValue;
        }
    }
显然,这并不适用于每种情况,因为某些属性的类型为
int

我知道,
targetType
参数很可能是我在这个转换器中需要使用的参数,但我没有发现如何正确使用它来将返回值转换为相应的值的示例

有人知道如何在此上下文中使用
targetType
参数吗?

您可以这样做

var typeCode  = Type.GetTypeCode(targetType); // Pass in your target type

if(typeCode  == TypeCode.Int32)
{
  // it is int type
}

这应该可以在没有太多开销的情况下工作:

public object Convert(
    object value, Type targetType, object parameter, CultureInfo culture)
{
    double result = ... // your math

    return System.Convert.ChangeType(result, targetType);
}