1

タイトルはおそらく開発者のスラングの観点からはあまり正確ではありませんが、これは私が達成しようとしていることです:

1 つの変数 x を持つ構造体 z があり、構造体 z のインスタンスを作成する際に、x を x の型のリストに制約する必要があるため、zx = xType.1 または zx = xType.2 で、xType 1と 2 は文字列であり、x もやはり文字列です。

Dim a As z
a.x = xType.1
Print(a.x)      'outputs "abc" because xType.1 = "abc"

編集1:

Structure Z
    Dim X as String
End Structure

Sub Main()
    Dim a As Z
    a.X = "abc"
    Print(a.X) 'outputs "abc"
End Sub

これは、aXに任意の値を割り当てることができる最も簡単な方法です...次のようなことを達成したい:

Structure Z
    Dim X as ???
End Structure

Sub Main()
    Dim a As Z
    a.X = XType.abc
    Print(a.X) 'outputs "abc"
    a.X = XType.Zebra
    Print(a.X) 'outputs "Melons"
End Sub

そのため、別の構造を作成するか、これらの XType をどこかで定義する必要があります。

4

1 に答える 1

1

あなたが使いたいのは列挙型だと思います。次のようなことができます。

Structure Z
    Public Enum XType
        abc
        bcd
    End Enum
    Dim X As XType
End Structure

Sub Main()
    Dim a As Z
    a.X = Z.XType.abc
End Sub

このようにして、X の定義済みの値を作成できます。これは、MsgBox に選択可能なさまざまな MsgBoxStyles があるのと似ています。

編集:

X の文字列値を取得するために ToString() を呼び出す必要がないようにしたい場合は、次のようなことを試すことができます (おそらく最も効果的ではありませんが、機能します)。

Structure Z
    Public Enum XType
        abc
        bcd
    End Enum
    Private Xt As XType
    Public Property X As Object
        Get
            Return Xt.ToString()
        End Get
        Set(ByVal value As Object)
            If value.GetType().Name = "XType" Then Xt = value
        End Set
    End Property
End Structure

または、次のような 2 つのプロパティを持つこともできます。

Public X as XType
Public Property XString as String
    Get
        Return X.ToString()
    End Get
End Property

このリンクも役立つ場合があります: http://msdn.microsoft.com/en-us/library/essfb559(v=vs.90).aspx?cs-save-lang=1&cs-lang=vb#code-snippet- 1

于 2013-08-20T23:22:53.443 に答える