2

vs2010で古いVb6ソリューションを.net2.0に変換しています。私はC#で約3年間、.netで5年間働いています。この問題が発生したことは覚えていませんが、コレクションをC#初期化する場合は、サブを作成する以外に、クリーンな方法がありますか。それはどこか別の場所ですべてオフですか?読みやすさとシンプルさのために、宣言のクラスレベルでそれを実行できるようにしたいと思います。readonlyDerivedControlFoo

例:

Private _formattedFormulaText As IEnumerable(Of Label) = New List(Of Label) From { _
 FormulaLabels0, FormulaLabels1, lblBrownFormula, FormulaLabels3, lblGreenFormula, _
      lblOrangeFormula, lblRedFormula, FormulaLabels7, lblFormulaTotal}

簡単で簡単な方法で行うと、コレクションがいっぱいになります{nothing,..,nothing}

4

1 に答える 1

0

これはスレッドセーフではありませんが、私の目的には非常にうまく機能します。

使用中のソリューション:

 Private _formattedFormulaText As New Lazy(Of IEnumerable(Of Label))(Function() New List(Of Label) From { _
 FormulaLabels0, FormulaLabels1, lblBrownFormula, FormulaLabels3, lblGreenFormula, _
      lblOrangeFormula, lblSRedFormula, FormulaLabels7, lblFormulaTotal})

欠点-変数に触れるすべてのコードは、アクセサーを追加する必要があります.value。私のコードには、これらの怠惰なコレクションが5つあり、コレクションごとに1〜2のタッチポイントが通常同じ関数に含まれています。

欠点の図:

Dim clearText = Sub(c As Control) c.Text = String.Empty
        _formattedFormulaText.ToList.ForEach(clearText)

になります

Dim clearText = Sub(c As Control) c.Text = String.Empty
        _formattedFormulaText.Value.ToList.ForEach(clearText)

.net 4で使用されるデバッガー表示のグッドプラクティスに準拠していませんが、リフレクターを使用して簡単に追加できます


タッチポイントで.valueを実行する必要をなくすために、プロパティが使用された可能性があることに注意してください。

   Private ReadOnly Property FormattedText As IEnumerable(Of Label)
        Get
            Return _formattedFormulaText.Value
        End Get
    End Property

サポートクラス:

''' <summary>
''' translated from http://msdn.microsoft.com/en-us/vcsharp/bb870976.aspx
''' </summary>
Public Class Lazy(Of T)
    Private _func As Func(Of T)
    Private _result As T
    Private _hasValue As Boolean
    Public Sub New(ByVal func As Func(Of T))
        _func = func
        _hasValue = False
    End Sub
    Public ReadOnly Property Value As T
        Get
            If Me._hasValue = False Then
                _result = _func()
                _hasValue = True
            End If
            Return _result
        End Get
    End Property

End Class

MSDNの記事C#でのレイジー計算に基づく設計 また、Reflectorの支援を受けて

assembly\NativeImages_v4.0.30319_32\mscorlib\246f1a5abb686b9dcdf22d3505b08cea\mscorlib.ni.dll
于 2011-02-07T16:37:17.870 に答える