我有一个这样声明的类:
public abstract class CrmAttribute <T> : ICrmAttribute
{
}
在下面的一种方法中,我有这个
castedValue = (T)value;
castedValue
然后在类型为 T
的其他方法中用作参数。
我的问题是出现了一个情况,上面的转换抛出一个 InvalidCastException
。
据我所知,这是一个具体案例;在 Dynamics 2011 中,Microsoft 最终摆脱了 CRMNumber
等自定义类型,转而使用固有的 .Net 类型,但并非适用于所有情况。在剩下的类型中,有一个复杂的 Money
类型,它具有 .Value
的一个属性,其中包含一个小数。这是我的异常被抛出的地方,因为我无法将小数转换为 Money 类型。尽管 Money
对象本质上是一个 Decimal
。
我对泛型还是很陌生,其中大部分是继承代码,所以我很清楚正确的 react 是不这样做本身,但我想做的就是能够创建我自己的类型 Money
到 Decimal
的隐式转换,以便使用 T
的行将正确转换。
这可能吗?
最佳答案
最好的办法是在类中围绕转换添加代码以测试 T 是否是有问题的类型并执行适当的转换而不是依赖转换。
也许是这样的:
if (typeof(Money).IsAssignableFrom(typeof(T))
{
// special handling required to convert decimal to money
castedValue = new Money() { Value = value }; // ? best guess
}
else
{
castedValue =(T)value;
}
关于c# - 我可以创建自定义隐式类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8478752/