gpt4 book ai didi

c# - 尝试返回元组时,对象必须实现 IConvertible

转载 作者:太空狗 更新时间:2023-10-29 23:13:42 32 4
gpt4 key购买 nike

运行时出现如下错误

"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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com