在我的课上,我实现了隐式运算符和IConvertible接口。当使用带有NHibernate的类时(这不是它的问题),我得到的类型为“mytype”的对象无法转换为“字符串”。当我查看堆栈跟踪时,显示System.RuntimeType.TryChangeType方法中发生错误。如果我反编译代码它进一步调用Binder.ChangeType,所以看起来它不使用IConvertible接口。 Binder是一个抽象类,它位于System.Reflection命名空间中。如何向系统提供知识,以便能够从我的类型自动转换为字符串。我想要一个值(组件)对象,它有几个int属性到一个字符串,我不想做额外的步骤。
我们有一个组件PolicyNumber映射为
Component(x => x.PolicyNumber, m =>
{
m.Map(x => x.Year, "Year");
m.Map(x => x.ClientNumber, "ClientNumber");
m.Map(x => x.OptionNumber, "BidOptionNumber");
}).ReadOnly();
在QueryOver中,我想将其投影到格式为year-clientNumber-bidOptionNumber的字符串中。这只是一个例子,我们使用了更多的值对象而不是魔术字符串。
.Select(Projections.Group<ClientPolicy>(x => clientPolicy.PolicyNumber))
.WithAlias(() => dto.ClientPolicyNumber)
如果将dto上的PolicyNumber定义为类型字符串,那么我希望ToString()发生。我通过在对象上提供Value属性来解决这个问题,但如果发生这种自动转换会很好。基于调用堆栈跟踪,似乎不可能。此外,我不想为每个值对象创建IUserType实现,因为有很多。
答案 0 :(得分:0)
你没有。无法在类型和任意类型之间创建隐式转换在运行时(这与编译时的隐式转换完全不同)。您需要让代码明确地执行转换。