【问题标题】:Implementing Where() extension method on a System.Collections.Generic.SortedList在 System.Collections.Generic.SortedList 上实现 Where() 扩展方法
【发布时间】:2009-09-09 02:50:59
【问题描述】:

我有一个私有类变量,其中包含一组订单项:

Private _Items As New System.Collections.Generic.SortedList(Of Integer, OrderItem)

我正在尝试做什么通过使用 IEnumerable 的 .Where() 扩展方法的类上的属性获取和设置项目的子集(我认为)。大致如下:

Public Property StandardItems() As SortedList(Of Integer, OrderItem)
    Get
        Return _Items.Where(Function(ItemID As Integer, Item As OrderItem) Item.ItemType = "SomeValue")
    End Get
    Set(ByVal value As SortedList(Of Integer, OrderItem))
        _Items = value
    End Set
End Property

这可能吗?如果是这样,我将如何实施它?我对 MSDN 文档、Visual Studio intellisense 或反复试验不太满意。

【问题讨论】:

    标签: .net .net-3.5


    【解决方案1】:

    Where 扩展方法返回一个IEnumerable(Of KeyValuePair(Of Integer, OrderItem))。您可以将属性的类型更改为它。

    如果您需要返回一个排序列表,则必须从 Where 方法的输出手动创建它:

    Dim whereQuery = ...
    Return New SortedList(Of Integer, OrderItem)(whereQuery _
                          .ToDictionary(Function(x) x.Key, Function(x) x.Value))
    

    我有点担心你的二传手的行为。您想通过属性替换整个排序列表吗?它的名字说它只是标准项目(一组过滤的项目),但设置它会改变所有项目。

    【讨论】:

    • 我担心可能是这种情况。我真的不想返回 IEnumerable 或 Newed SortedList。我希望能够只返回基本列表的“过滤视图”。我知道你在说什么设置。这是一个简单的例子,我没有多想。看来我可能不得不改变访问解决方案中项目的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多