我正在尝试在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 }
有没有人知道发生了什么?
答案 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);
}
}