2017-09-22 8 views
0

プライマリクラスメンバがDictionary(Of DateTime,CustomClass)のクラスがあります。特定の条件が満たされている場合は、.Where(Function(p) p.isTrue)関数のように、辞書の要素を削除するメソッドを記述したいと思います。私は述語をUSINGに書いていますが、それを使って構築することは何も見つかりませんでした。これは可能ですか?ファンクション/述語パラメータを持つクラスメソッド

+0

私はこのクラスをマッピングに使用していますが、あなたが説明した少しのためにオーバーウィークしているようです。メソッドに条件データを渡すことができませんでした。いくつかのパラメータは省略可能で、省略時にスキップされる可能性があります。 – Plutonix

答えて

0

私は通常、LINQのすべてのgung-hoですが、For/Nextループを使用して辞書を逆順に繰り返し、条件に合わない項目を削除する必要があると考えられる状況です。

Public Class Foo 

    'Primary class member 
    Public Property Bar As Dictionary(Of DateTime, Foo) 

    'Remove method based on some condition (you may want to pass a parameter here too) 
    Public Sub Remove() 
     'Use a For/Next loop backwards 
     For index As Integer = Me.Bar.Keys.Count - 1 To 0 Step -1 
      'Check for if the condition is met and then remove the item by its index 
      'If ... Then 
      ' Me.Bar.Remove(Me.Bar.ElementAt(index).Key) 
      'End If 
     Next 
    End Sub 

    Sub New() 
     Me.Bar = New Dictionary(Of DateTime, Foo) 
    End Sub 

End Class 
+0

私はもう少しダイナミックなものを望んでいました。この問題は、1つの条件に対してのみ機能することです。私は 'Foo'の日付比較や属性のために同じメソッドを使用できることを期待していました。 – Andrew

+0

これは日付だけではなく、Ifステートメントにすべての条件(日付とカスタムクラス)を設定するだけです。より具体的な例を挙げてください。より良い例をお伝えします。 – David

+0

私はOPがパラメータとして条件を渡すことができるようにしたいので、 'Remove()'関数でハードコードする必要はありません。 Bozhidarが提案したようなもの。 –

0

はい、可能です。

だけの条件を表しFunc(Of...)引数を持つメソッドを宣言します。

Public Sub RemoveElementIf(condition As Func(Of KeyValuePair(Of DateTime, Foo), Boolean)) 

    If condition IsNot Nothing Then Bar = Bar.Where(Function(x) condition(x)) 

End Sub 

その後は、内部的にLINQを使用することができます。

関連する問題