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"的类型与作为泛型传递的类型之间不存在不匹配的问题。
我可以创建一个泛型类并覆盖执行解析的方法,但我认为可能有一种方法可以在单个方法中做到这一点。
这将编译并将结果转换为T
:
Value = (T)(object)A;
试试这个,
var res = (T)Convert.ChangeType(val, typeof(T))