2017-08-17 37 views
0

我试图使用字符串变量的值成为我的新变量的名称。例如参见下面的代码。我这样做的原因是我有一个文本文件,其中包含我需要为其创建对象的变量的名称。也许还有另一种方式来做到这一点?使用存储在字符串中的内容作为新的变量名

Dim mystring As String 
    mystring = "Variablename" 
    'dim "Variablename" as object 
+1

没有。那么,不是没有发射代码,这是非常困难的。所以,我们这里有一个X/Y问题。你应该[编辑]并给出你想要做什么的完整解释*或者*你试图解决什么问题*。 – Will

+0

您可能需要使用反射。 [这可能会帮助](https://stackoverflow.com/questions/3432317/visual-basic-dynamically-create-objects-using-a-string-as-the-name) –

+1

听起来像一本字典可以工作,它提供与变量相同的“服务”...它可以让你按名称从内存中调用值,这是一个变量的根源 – soohoonigan

回答

0

如何使用集合?集合中项目的密钥将是您的变量名称,集合中项目的是您的变量。

0

以下是使用自定义属性创建类的示例。如果你想走这条路线,这会帮助你:

' 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等等。祝你好运!

相关问题