C#:从泛型转换为值类型

本文关键字:类型 转换 泛型 | 更新日期: 2023-09-27 18:30:43

我有一个解析字符串并将结果转换为泛型的方法.
例如(伪代码):

let S be a string.. and Value my generic type
if (generictype == int) Value = int.parse(S);
else if (generictype == float) Value = float.parse(S);

问题是我甚至无法让演员工作:

T Value;
if (typeof(T) == typeof(float))
{
    var A = 1.0f;
    Value = A       // doesn't compile
    Value = A as T; // doesn't compile
    Value = (T)A;   // doesn't compile
}

我不明白的是,我们知道 T 是这段代码中的浮点数,但我无法为其编写浮点数。

目标是从字符串中解析不同类型的数字。在每种情况下,我都肯定知道类型,因此不存在处理传递错误类型的人等问题。

我正在尝试查看是否可以使用一种通用方法而不是几种方法。

我可以做:

Value = ParseInt(S);
Value = ParseFloat(S);
etc...

但我正在尝试:

Value = Parse<int>(S);
Value = Parse<float>(S);
etc...

同样,"Value"的类型与作为泛型传递的类型之间不存在不匹配的问题。

我可以创建一个泛型类并覆盖执行解析的方法,但我认为可能有一种方法可以在单个方法中做到这一点。

C#:从泛型转换为值类型

这将编译并将结果转换为T

Value = (T)(object)A;

试试这个,

var res = (T)Convert.ChangeType(val, typeof(T))