2012-11-15 110 views
0

我尝试将变量类型的Object int转换为var。使用变量类型铸造

我的尝试是:

var dummy = (items[items.Count() - 1].GetType()) items[items.Count()-1]; 

我不知道我在做什么错了,我看不到我的错误,但调试说,只有分配,递减和“新对象” -expressions可用作一个命令...但这就是我正在做的...

有人可以告诉我我的错误吗? 非常感谢,并对此“初学者问题”感到抱歉。

+1

这是不可能的。你想达到什么目的? – erikkallen

+0

我有一个具有不同类型对象的Arraylist,我尝试将它们转换为一个var,以从另一个只有一种类型的对象的列表中为它们赋值。但好的...然后我必须做一个“typeof”开关。谢谢。 – BudBrot

+0

带你的问题!我们只是不知道你在做什么以及你想做什么。 – Sylca

回答

2

您需要使用Convert.ChangeType

var obj = Convert.ChangeType(d, items[items.Count() - 1].GetType()); 
+0

的问题,因为在他的问题 –

+0

WOW中不一致,所以我已经-1了OP。谢谢。这是有效的,比“typeof”开关短得多。 – BudBrot

+0

不客气。 – Adil

1

下面是您遇到的错误的来源。

你的编译器看到(items[items.Count() - 1].GetType())作为一种表达,而非铸造语句,所以它认为是

getAValue() (items[items.Count() - 1].GetType()) 

不作任何意义。

你应该像其他人说的那样施放你的变量。

1

铸造是编译型的操作,你告诉编译器:“这个对象是一个[此处插入类型]”。 GetType()是一种运行时方法,返回特定类型(类型Type)。所以有几个问题,你不能在编译时构造中使用运行时方法。其次,在这种情况下,您实际上可以铸造(假设这是可能的)到Type而不是说String(假设GetType()返回String)。

我不知道你要完成什么,但是这可能是你想要做什么:http://msdn.microsoft.com/en-us/library/dtb69x08.aspx

另外,我觉得是(根据什么var上一些你可能无法理解你的注释)。你“把东西变成var”,var本质上是一个允许编译器推断类型的捷径。因此,像这样:

var myString = "this is a test"; 

是等价的:

string myString = "this is a test"; 
+0

感谢您的解释。现在我甚至明白我的错误。 – BudBrot