c# - 我可以创建自定义隐式类型转换吗?

标签 c# generics casting dynamics-crm dynamics-crm-2011

我有一个这样声明的类:

public abstract class CrmAttribute <T> : ICrmAttribute
{

}

在下面的一种方法中,我有这个

castedValue = (T)value;

castedValue 然后在类型为 T 的其他方法中用作参数。

我的问题是出现了一个情况,上面的转换抛出一个 InvalidCastException

据我所知,这是一个具体案例;在 Dynamics 2011 中,Microsoft 最终摆脱了 CRMNumber 等自定义类型,转而使用固有的 .Net 类型,但并非适用于所有情况。在剩下的类型中,有一个复杂的 Money 类型,它具有 .Value 的一个属性,其中包含一个小数。这是我的异常被抛出的地方,因为我无法将小数转换为 Money 类型。尽管 Money 对象本质上是一个 Decimal

我对泛型还是很陌生,其中大部分是继承代码,所以我很清楚正确的 react 是不这样做本身,但我想做的就是能够创建我自己的类型 MoneyDecimal 的隐式转换,以便使用 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/

相关文章:

c# - 泛型/模板中的长(可读)名称

c# - Visual Studio 2015 : Invalid "Cast is redundant" warning in interpolated string expression

c# - 哪个线程运行 `await` 关键字之后的代码?

c# - 如何知道 CancellationToken 是否有注册的取消方法?

r - 了解 R 中的 switch() 函数?

java - "Object"对象类型转换和对 "Some"类对象的引用

mysql - SQL 将 int 转换为日期时间

c# - asp.net 使用客户端验证而不发布到服务器

c# - 基于JSON的架构,如何最好地同步前后端

generics - 如何让 Rust 函数接受任何 float 类型作为参数