ReDim数组vb.net中的对象

时间:2017-10-02 09:32:11

标签: vb.net

有没有办法做到这一点?

public MyDic as new Dictionary(Of string,Object)
MyDic.Add("SomeName",new object)
' GetValue is a Extension method and uses dic.TryGetValue(...)
ReDim MyDic.GetValue("SomeName")  as New DataRow 

我要做的是在运行时定义所需的变量并将其作为新定义的类型

进行访问

有可能吗?

还有其他方法或建议可以实现吗?

感谢您的时间

1 个答案:

答案 0 :(得分:1)

修改

根据您的评论,我正在修改答案。我会留下原件,以防其他人像我最初那样理解你的问题。

您无法修改方法的返回类型并将其返回到字典中。但你可以做的是直接在字典中更改项目。

Dim stuff As New Dictionary(Of String, Object)
stuff.Add("SomeName", New Object())

' Later, when you have to change it.
stuff("SomeName") = 23  ' If you didn't have "SomeName" as a key, it will be created. Otherwise the value will be changed.

您可以将此包装在扩展方法中,如下所示:

<Extension>
Public Sub SetValue(dic As Dictionary(Of String, Object), valueName As String, value As Object)
    If Not dic.ContainsKey(valueName) Then Throw New ArgumentOutOfRangeException ' Or whatever you want to do here
    dic(valueName) = value
End Sub

原创 - 我最初认为您想确定哪种类型的对象并做出相应的响应。

不是添加新对象并尝试稍后更改,只需在有值时添加所需的项目。当你找回它时,确定它是什么并相应地处理它。我已经像你一样定义了字典。

Dim stuff As New Dictionary(Of String, Object)

stuff.Add("SomeName", 23)

Dim item = stuff.GetValue("SomeName")
If item IsNot Nothing Then
    Select Case item.GetType()
        Case Is = GetType(String)
            Console.WriteLine("String")
        Case Is = GetType(Integer)
            Console.WriteLine("Integer")
    End Select
End If

如果没有更多关于你要添加的内容,我无法提供更具体的内容。您可以使用它来确定整数,字符串等的作用。

我仍然建议使用一些基础来Dictionary(Of String, BaseClass)Dictionary(Of String, IInterface),你可以安全地假设你可以用你得到的值做什么。