在运行时,我收到以下错误
"对象必须实现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);
}
Run Code Online (Sandbox Code Playgroud)
码的目的是在通过<T>("15")并使其产生tuple<Bool,T,object>这将是tuple<true, 15, "15">
它出错了我用//错误标记的地方
ConvertType是一种方法,可让您将实现的对象转换IConvertable为一组固定对象(字符串、数字类型等)之一。它不仅无法将任何IConvertible对象转换为任何类型Tuple(如果您查看该接口的方法你会明白为什么。)但是Tuple你调用它的地方并不IConvertible像错误消息告诉你的那样。
当然,解决方案是ChangeType一开始就不要打电话。它的存在是为了将对象从一种类型转换为另一种类型,但是您拥有的对象已经是正确的类型,您只需通知编译器编译时表达式应该不同,并且您知道该类型将始终匹配运行。您只需使用常规演员即可做到这一点:
tmp = (Tuple<bool,T,object>) (object) I(o.ToString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19413 次 |
| 最近记录: |