Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类别及;功能选择泛型_C#_.net_Wpf_Generics - Fatal编程技术网

C# 类别及;功能选择泛型

C# 类别及;功能选择泛型,c#,.net,wpf,generics,C#,.net,Wpf,Generics,我有一个名为IFilterDataSourceAdapter的接口。此接口公开用于适应传入数据源(IEnumerable、iCollectionView或DataTable或DataView或XmlDocument)的端点,并提供直观过滤它们的功能 它接受数据源中字段的名称 生成过滤器字段的列表,每个字段公开三个属性 字段名称 基于字段的类型筛选运算符列表-等于、包含、小于等 提供的值字段 GUI可以使用此FilterField列表来显示过滤器面板 适配器将提供自己的ICommand,以从GUI

我有一个名为
IFilterDataSourceAdapter
的接口。此接口公开用于适应传入数据源(
IEnumerable
iCollectionView
DataTable
DataView
XmlDocument
)的端点,并提供直观过滤它们的功能

  • 它接受数据源中字段的名称
  • 生成
    过滤器字段的列表,每个字段公开三个属性

  • 字段名称
  • 基于字段的
    类型
    筛选运算符列表-等于、包含、小于等
  • 提供的值字段
  • GUI可以使用此
    FilterField
    列表来显示过滤器面板

  • 适配器将提供自己的
    ICommand
    ,以从GUI执行筛选器调用
  • 所以在thw适配器中,我想执行以下操作

  • 如果传入数据源的类型为
    IEnumrable
    ,则在应用筛选器时,我将生成
    AsQueryable()
    Linq表达式,并将查询的
    IEnumrable
    列表返回
  • 如果传入数据源的类型为
    ICollectionView
    I,我将生成
    Filter
    delegate并刷新集合视图
  • 如果传入的数据源是
    DataTable
    DataView
    类型,我将生成
    DataFilter
    基于字符串的查询并刷新数据表或数据视图
  • 如果传入数据源的类型为
    XDocument
    ,它将生成
    XPath
    表达式和
    XElements
    过滤列表
  • 我想根据受上述数据源类型约束的
    泛型
    来执行此操作,并相应地区分
    过滤器
    命令执行

    我们是否可以有一个单独的接口
    IFilterDataSourceAdapter
    来约束其成员(字段和函数),因为T是
    IEnurable
    ICollectionView
    DataTable
    DataView
    XDocument

    编辑:

    我当前的实现实际上是针对每种类型的数据源使用5种类型的asbtract适配器,它们工作得很好。它们都实现了IFilterDataSourceAdapter
    。但我认为,我们可以使
    IFilterDataSourceAdapter
    具有约束,而不是更适合每个适配器实现的设计。所以我所拥有的可能已经很好了


    可能是我想得太多了

    可能不是答案,但评论太长了。。。根据我对您问题的理解,我想说您现在拥有的(具有不同接口的公共基础接口,每个接口特定于一个数据源)很好

    我具体指的是你问题的这一部分:

    我们可以有一个单一的接口
    IFilterDataSourceAdapter
    be吗 基于T约束其成员(字段和函数) 可以是
    IEnurable
    ICollectionView
    DataTable
    DataView
    XDocument

    如果“泛型”接口应根据其泛型参数T的类型指定不同的实现,那么该接口实际上不是泛型的,是吗


    使用泛型,您应该抽象出不同类型的常见行为,而约束只允许您更精确地定义定义此常见行为的不同类型集。

    可能不是答案,但对于注释来说太长了。。。根据我对您问题的理解,我想说您现在拥有的(具有不同接口的公共基础接口,每个接口特定于一个数据源)很好

    我具体指的是你问题的这一部分:

    我们可以有一个单一的接口
    IFilterDataSourceAdapter
    be吗 基于T约束其成员(字段和函数) 可以是
    IEnurable
    ICollectionView
    DataTable
    DataView
    XDocument

    如果“泛型”接口应根据其泛型参数T的类型指定不同的实现,那么该接口实际上不是泛型的,是吗

    使用泛型,您应该抽象出不同类型的常见行为,而约束只允许您更精确地定义定义此常见行为的不同类型集