-2

我有一些字符串要转换为不同的类型——通常是枚举。持有这个的类是一个泛型类型,所以即使我保存了类型,我也找不到如何动态转换的方法

                if(type.IsEnum)
                     typedValue = Enum.Parse(type, value , true);
                }
                else
                {
                    typedValue = Convert.ChangeType(value,type);
                }

                foreach (Delegate method in pair.Value)
                {

                    method.DynamicInvoke(new[] { value, typedValue, time });
                }'

我需要根据类型将类型化值更改为不是保存类型而是作为泛型类型

4

2 回答 2

0

您不能这样做,因为仅在编译时才知道类型时才使用泛型。在您的示例中,type变量表示运行时类型。

于 2013-02-17T15:21:10.057 回答
0

您可以Type使用typeof.

public T Convert<T>(T value)
{
    Type type = typeof(T);
    if(type.IsEnum)
        return (T)Enum.Parse(type, value , true);
    } else {
        ...
    }
}

当然,您也可以使用类的通用参数来做到这一点。但无论如何,您需要在编译时知道类型。类型安全基于编译器检查。如果您在编译时不知道类型,则需要返回 anobject或 a dynamic,除非您具有所有涉及的类型共有的更具体的类型。


假设您能够创建一个完全动态地返回正确类型的方法。

var converted = Convert(type, value);

// Are you allowed to do this?
converted = 2 * converted;

// or this?
converted = converted + " hello";

// or even this?
converted.SaveAs("C:\Data\Converted.txt");

由于调用者在编译时(甚至设计时)不知道类型,因此他无法以适当的方式使用此类型。这是逻辑上的限制,而不是语言的限制。即使使用动态语言或 C-Sharp 的dynamic类型,您也需要了解您在设计时使用的类型。

于 2013-02-17T15:32:01.860 回答