实现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

回到顶部