VB.net如何手动/显式地将数组转换为ObjectCollection?

时间:2015-06-21 23:27:36

标签: vb.net casting

使用strict = off(project..project properties..strict = off),我可以

Dim Objects As Object = New Object() {"AAA", "BBB"}        
ListBox1.Items.AddRange(Objects)

但是,如果我做严格=然后它告诉我

Error   1   Overload resolution failed because no accessible 'AddRange' can be called with these arguments:
    'Public Sub AddRange(items() As Object)': Option Strict On disallows implicit conversions from 'Object' to '1-dimensional array of Object'.
    'Public Sub AddRange(value As 

System.Windows.Forms.ListBox.ObjectCollection)': Option Strict On disallows implicit conversions from 'Object' to 'System.Windows.Forms.ListBox.ObjectCollection'.   

通常使用strict = off隐式的这些转换,当我转为strict = on时,编译错误会告诉我要将其更改为什么。但在这里它并没有提出任何建议。

我想保持严格=(至少为了学习这个目的)

如何明确地转换它,以便它不会给出编译错误。所以我可以让这两行用strict = on?

添加了澄清

我现在看到我错过了括号。所以我会澄清我的问题。问题是这个 -

如果我这样做

 Dim nums As Integer = {4, 5, 6, 7}

然后我得到一个编译错误,即使用strict = off也无法编译它

另一方面,这个

dim obj as Object = {4,5,6,7]

上面的那一行将使用strict = off进行编译,因为即使右侧是一个对象数组,它也可以是一个对象,也可以转换为一个对象。

如果我执行strict = off然后它可以工作,那么VB正在进行一些转换以使其工作。即,它不能将整数数组转换为整数。但它(似乎)可以将对象数组转换为对象。

即。当编译器看到Dim nums As Integer = {4, 5, 6, 7}并且严格=关闭时,它没有说"啊他错过了括号"并将其转换为dim nums为Integer()= {4,5,6,7}。同样地,我确信它不会使用dim object as Object = {3,4,5,6},但它在对象案例中做了一些事情,以使其工作。它隐含地做了。

我希望看到它是什么,明确地说,我想看看添加到它的是什么,copiler会添加它,进行转换,以使其工作。不管它是什么,它都没有添加括号。

1 个答案:

答案 0 :(得分:1)

只需在Dim Objects As Object() = New Object() {"AAA", "BBB"}

之后添加parens
Objects

原因是您将Object声明为Objects,而不是Dim Objects = New Object() {"AAA", "BBB"} 的数组。请注意,您也可以这样做:

object

此外,我建议您遵守命名约定并将变量命名为小写Dim objects = New Object() {"AAA", "BBB"}

$array = array(); 
while ($row = mysql_fetch_array($query)) { 
    array_push($array, $row["ipsum"]);
} 

if (in_array($page1, $array)) {echo "correct";}
else {echo "not correct"; }