2

一見非常に基本的な質問があります。高性能アプリケーションで呼び出される MyEnum.ToString() を使用して、定数文字列が実際に列挙型よりも優れているかどうかを判断しようとしています。

私はこのようなクラス、列挙型、メソッドを持っています...

    Public Enum MyEnum
        MyValue1
        MyValue2
    End Enum

    Public Class MyImportantClass

            Public Sub Foo(ByVal enumerationValue As MyEnum)

            ' Some code in here that needs to do this at some point
            Dim str As String = enumerationValue.ToString()

    End Sub

    End Class

enumerationValue.ToString() にはパフォーマンスの問題があることを理解しています。ただし、別の開発者は、列挙型を使用する代わりに定数文字列を使用することを提案しました。私の問題は、メソッドのパラメーターが文字列であり、呼び出し元が必要なものを渡すことができることです。明らかに、文字列だけが機能するわけではないため、これは実行時のバグです。

Public Sub Foo(ByVal enumerationValue As String)

    ' Some code in here that needs to do this at some point
    '   Dim str As String = enumerationValue

End Sub

列挙型の安全性が必要ですが、定数のパフォーマンスが必要です。私が言ったように、私は自分のケーキを食べて食べる方法を探しています.

4

3 に答える 3

1

Enumははるかに進んでいます。偽のデータを取得することは決してないため、やや自己文書化されており、間違いなく「成功の穴」に陥っています。

確かなことはわかりませんが、 .ToString() はいいことをしているのではないかと思います-心配しないでください。よく呼ばれます!

于 2012-09-19T18:59:56.643 に答える
0

OK、これはあなたが望むものではないかもしれませんが、タイプ セーフが提供され、ToString後で行う必要がなくなります。最初に、setter を持たない 1 つのプロパティを持つクラスと、設定を行う New メソッドを設定します。

Public Class MyEnumObj
    Private _Value As String
    Public ReadOnly Property Value As String
        Get
            Return _Value
        End Get
    End Property
    Private Sub New()
        ' Hide the default constructor '
    End Sub
    Public Sub New(inValue As String)
        _Value = inValue
    End Sub
End Class

次に、「定数」を宣言します。

Public MyValue1 As New MyEnumObj("MyValue1")
Public MyValue2 As New MyEnumObj("MyValue2")

それらは一定ではありませんが、変更することはできません。適切に使用するFriendことで、他の誰もオブジェクトを作成できないように配置できると思います。今、あなたは言うことができます:

Public Sub Foo(Optional ByVal enumerationValue As MyEnumObj = Nothing)

        ' Some code in here that needs to do this at some point '
        Dim str As String = If(enumerationValue IsNot Nothing, enumerationValue.Value, String.Empty)

End Sub

これはやり過ぎかもしれませんが、オブジェクトは型の安全性に役立つ傾向があります。

于 2012-09-19T19:57:04.683 に答える
0

列挙型に固執します。関数にパラメーターとして渡すことで、よりユーザーフレンドリーになります。IDE は、使用可能な項目のリストをポップアップ表示できます。

列挙型を文字列に変換するには、 (Enum, String) の辞書を持つことができます

また

列挙型に属性を配置する方法に関するいくつかの素晴らしい記事があります。この方法で、それを文字列に変換できます。

VB.NET で列挙型に属性を与えることはできますか (Java でできるように)?

http://weblogs.asp.net/stefansedich/archive/2008/03/12/enum-with-string-values-in-c.aspx

于 2012-09-20T15:08:50.763 に答える