作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
运行时出现如下错误
"Object must implement IConvertible"
调用函数
lboxBuildingType.SelectedIndex = pharse.returning<int>xdoc.Root.Element("BuildingTypeIndex").Value);
public static T returning<T>(object o)
{
Tuple<bool, T, object> tmp;
switch (Type.GetTypeCode(typeof(T)))
{
////blah blah blah
case TypeCode.Int32:
tmp= (Tuple<bool,T,object>)Convert.ChangeType(I(o.ToString())), typeof(T)); // error
break;
////blah blah blah
}
}
private static Tuple<bool, Int32, Object> I(object o)
{
int i;
bool b;
Int32.TryParse(o.ToString(), out i);
b = (i == 0);
return new Tuple<bool, Int32, object>(b, i, o);
}
这段代码的目的是传入一个<T>("15")
。并让它产生 tuple<Bool,T,object>
这将是 tuple<true, 15, "15">
它在我用//错误标记它的地方出错
最佳答案
ConvertType
是一种允许您转换实现 IConvertable
的对象的方法成一组固定的对象(字符串、数字类型等)中的一个。它不仅不能转换任何 IConvertible
对象转换成任何类型的 Tuple
(如果您查看该接口(interface)的方法,就会明白原因。)但是 Tuple
你调用它不是IConvertible
正如错误消息告诉您的那样。
当然,解决方案就是不调用 ChangeType
首先。它的存在是为了将对象从一种类型转换为另一种类型,但是您拥有的对象已经是正确的类型,您只需要通知编译器编译时表达式应该不同,并且您知道该类型将始终在运行时匹配。你只需要一个普通的 Actor 就可以做到这一点:
tmp = (Tuple<bool,T,object>) (object) I(o.ToString());
关于c# - 尝试返回元组时,对象必须实现 IConvertible,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33216561/
我是一名优秀的程序员,十分优秀!