【发布时间】:2017-08-31 16:31:26
【问题描述】:
我正在修改一个工具,因为我希望能够使用泛型类型。 它具有“AsDouble”、“AsBool”等属性。
我想强制进行类型转换,我不在乎它是否会在运行时抛出。我只是想让它编译。
所以...这不编译...
public T As<T>()
{
Type type = typeof(T);
if (type == typeof(Double))
{
return (T)(AsDouble);
}
// more conditionals
}
但确实如此……
public T As<T>()
{
Type type = typeof(T);
if (type == typeof(Double))
{
return (T)(AsDouble as object);
}
// more conditionals
}
为什么会这样?我如何让它停止抱怨,只做我要求它做的事?或者有比我想象的更好的方法吗?
// 与建议的不重复。 (Type1)Type2 不起作用...我想知道为什么从 T1 转换到 T2 到 T3 有效,但不是 T1 到 T3。 (T1 是双精度型,T2 是对象型,T3 是泛型类型。)请在将其标记为重复之前阅读我的问题。
【问题讨论】:
-
AsDouble 是复杂类型吗?
-
Generic Casting的可能重复
-
不,AsDouble 是一个将变量作为“double”返回的属性。它只是尝试转换和 TryParse。
-
System.IConvertible已经存在,你为什么要这样做? -
System.IConvertible 要求我实现 15 种不同的方法。我不需要那么多。这也会令人困惑。