我试图使用字符串变量的值成为我的新变量的名称。例如参见下面的代码。我这样做的原因是我有一个文本文件,其中包含我需要为其创建对象的变量的名称。也许还有另一种方式来做到这一点?使用存储在字符串中的内容作为新的变量名
Dim mystring As String
mystring = "Variablename"
'dim "Variablename" as object
我试图使用字符串变量的值成为我的新变量的名称。例如参见下面的代码。我这样做的原因是我有一个文本文件,其中包含我需要为其创建对象的变量的名称。也许还有另一种方式来做到这一点?使用存储在字符串中的内容作为新的变量名
Dim mystring As String
mystring = "Variablename"
'dim "Variablename" as object
如何使用集合?集合中项目的密钥将是您的变量名称,集合中项目的值是您的变量。
以下是使用自定义属性创建类的示例。如果你想走这条路线,这会帮助你:
' Note: There is no root namespace in the project properties
Imports System.CodeDom.Compiler
Imports System.Reflection
Namespace Foo
Module Module1
Sub Main()
Dim instance = createInstance({"Prap", "Prep", "Prip", "Prop", "Prup"})
instance.Prap = "Prappy"
Console.WriteLine(instance.Prap)
End Sub
Private Function createInstance(propertyNames As IEnumerable(Of String)) As Object
Dim codeProvider As New VBCodeProvider()
Dim codeCompiler As ICodeCompiler = codeProvider.CreateCompiler()
Dim compilerParameters As New CompilerParameters()
compilerParameters.CompilerOptions = "/target:library"
Dim code =
"NameSpace Foo" & Environment.NewLine &
" Partial Public Class Bar" & Environment.NewLine
For Each name In propertyNames
code &=
String.Format(" Public Property {0} As String", name) & Environment.NewLine
Next
code &= " End Class" & Environment.NewLine &
"End Namespace"
Console.WriteLine("Code to compile:")
Console.WriteLine(code)
Dim result = codeCompiler.CompileAssemblyFromSource(compilerParameters, code)
If result.Errors.HasErrors Then
Console.WriteLine(result.Errors.OfType(Of CompilerError).Aggregate(Of String)("Errors:", Function(e1, e2) e1 & ", " & e2.ErrorText))
Return Nothing
Else
Console.WriteLine("Success")
Dim type As Type = result.CompiledAssembly.GetType("Foo.Bar")
Dim instance = Activator.CreateInstance(type)
Return instance
End If
End Function
End Module
End Namespace
输出:
代码编译:
命名空间富
部分公共类酒吧
公共财产PRAP作为字符串
Public Property Prep As String
Public Property Prip As String
Public Property Prop作为字符串现在
公共财产Prup作为字符串
末 类
末命名空间
成功
Prappy
,你也可以建立不同的物业类型不是字符串,这是硬编码的类。只要将它作为单独的数组包含在参数中,或者可以使用Tuple或Dictionary等等。祝你好运!
没有。那么,不是没有发射代码,这是非常困难的。所以,我们这里有一个X/Y问题。你应该[编辑]并给出你想要做什么的完整解释*或者*你试图解决什么问题*。 – Will
您可能需要使用反射。 [这可能会帮助](https://stackoverflow.com/questions/3432317/visual-basic-dynamically-create-objects-using-a-string-as-the-name) –
听起来像一本字典可以工作,它提供与变量相同的“服务”...它可以让你按名称从内存中调用值,这是一个变量的根源 – soohoonigan