将整数转换为对象并返回导致InvalidCastException

时间:2012-01-30 16:13:12

标签: c# object .net

我正在尝试在ListViewItem的Tag对象中存储3个变量。我现在这样做:

lvi.Tag = new object[] { value1, value2, value3 };

这不是问题,但是当我尝试使用此代码恢复它时:

object[] objs = (lvi.Tag as object[]);
int t = (int)objs[0];

它给了我一个例外System.InvalidCastException。我试过调试它,但调试器给了我正确的信息

objs = object[] { 1, 93234, 0 }

有没有人知道发生了什么?

2 个答案:

答案 0 :(得分:5)

以下代码完美无缺:

class Program
{
    static void Main()
    {
        ListViewItem lvi = new ListViewItem();
        lvi.Tag = new object[] { 1, 93234, 0 };

        object[] objs = (lvi.Tag as object[]);
        int t = (int)objs[0];
        Console.WriteLine(t);
    }
}

所以我猜你有双打(或小数或浮点数),但不是整数,所以请确保你回到正确的类型:

double t = (double)objs[0];

答案 1 :(得分:1)

我会将您的代码存储为类的实例。这样,只要你把它抛出就可以保持强类型。

class TagModel {
   int[] MyInts { get; set; }
}

class Program
{
    static void Main()
    {
        ListViewItem lvi = new ListViewItem();
        lvi.Tag = new TagModel() { MyInts = new int[] { 1, 93234, 0 }};

        var tagModel = (lvi.Tag as TagModel);
        int t = tagModel.MyInts[0];
        Console.WriteLine(t);
    }
}