实现IConvertible接口
我有自定义类型命名为LocalizedString,我需要实现IConvertible接口,因为当我们序列类型,以我们的数据库,我们使用Convert.ChangeType,我无法改变这部分代码。实现IConvertible接口
我所做的是我实现的:
string IConvertible.ToString(IFormatProvider provider) {
return string.Format(this.ToString());
}
object IConvertible.ToType(Type conversionType, IFormatProvider provider)
{
return Convert.ChangeType(this.ToString(), conversionType);
}
public TypeCode GetTypeCode()
{
return TypeCode.Object;
}
,我就走了所有其他方法与NotImplementedException因为我没有任何合理转换为其他类型。 (我将最终使他们扔InvalidCastException的,但那是另一回事。)
然而,当我调用Convert.ChangeType(val, pr.__property.PropertyType)
其中val = ""
,pr.__property.PropertyType = {Name = "LocalizedString" FullName = "Sampo.CMS.LocalizedString"}
代码崩溃,我仍然收到:
无效的转换,从“System.String '到'Sampo.CMS.LocalizedString'。
我需要做些什么?我被卡住了。
回答:
如果你在看MSDN System.IConvertable example你会发现他们在他们的实现中使用了Convert.ChangeType,但那是因为他们传递了一个double来进行转换。 Convert.ChangeType不会有任何想法如何转换或从您的自定义对象类型。我敢肯定,你需要实现内部的转换是诸如:
object IConvertible.ToType(Type conversionType, IFormatProvider provider) {
if (conversionType == typeof(Sampo.CMS.LocalizedString))
{
// Do your conversion here and return the string.
return this.ToString() + "!!!!";
}
throw new InvalidCastException($"Converting type \"{typeof(LocalizedString)}\" to type \"{conversionType.Name}\" is not supported.");
}
真的,对于16种左右的方法剩下你必须实现你很可能只是把他们InvalidCastExceptions以及.. 。
另外,是否有你在做IConvertable.ToString实现中的string.Format(this.ToString())的原因?你不通过它的任何参数,所以不应该只是是返回this.ToString()?
下面是一些可能有用的链接:
Type conversion example in C# .NET using the IConvertible interface
System.Convert source一些版本。它有Convert.ChangeType的来源,所以你可以看一看,看看它在做什么以及为什么不起作用。
以上是 实现IConvertible接口 的全部内容, 来源链接: utcz.com/qa/258843.html