vb.net/Linq:如何使用Generic类使用Linq?

时间:2015-03-11 12:40:23

标签: vb.net linq generics

我有下一个结构:

public class mysample

    public property status as integer

end class

Dim mylist=new List(Of mysample)

Dim item as new mysample
item.status=1
mylist.add(item)

Dim item1 as new mysample
item2.status=1
mylist.add(item1)
...

我有下一个正在计算的功能:

Function test(Of T)(newstatus as integer, mylist as List(of T)) as integer

    Dim res as integer = myList.Where(Function(x) x.status=newstatus).First.status

    Return res

End function

电话是我有兴趣执行的地方:test(Of mysample)(2, mylist)

我在不同的项目中有一个例子,因为这个原因它们不能相同我决定使用通用列表来进行我的Linq计算。

问题在于使我的状态不是对象的成员。

我该如何解决这个问题?所有的clases都有状态,但我有不同的类,我将名称作为泛型传递。

2 个答案:

答案 0 :(得分:4)

这些类是否共享一个公共基类或接口?如果是这样,你应该在泛型类型上放置一个过滤器,如下所示:

Function test(Of T as CommonBaseClassOrInterface)(newstatus as integer, mylist as List(of T)) as integer

这将允许您访问CommonBaseClassOrInterface上的任何成员。如果他们当前不共享基类或接口,您应该考虑添加一个,确保Status是成员。

如果由于某种原因你不能给他们一个基类或接口,你仍然可以使用反射来做到这一点,但我不建议你去那个方向。

答案 1 :(得分:1)

  

状态不是对象的成员。

是的,因为你没有以任何方式约束T 。致电

是完全合法的
test(Of Integer)(2, new list(of Integer))

会因为Integer没有status属性而失败。您需要将T约束为具有status属性(基类或公共接口)的某种类型,或者不使其成为通用

Function test(newstatus as integer, mylist as List(of mystatus)) as integer

    Dim res as integer = myList.Where(Function(x) x.status=newstatus).First.status

    Return res

End function
  

我在不同的项目中有个例子

你的意思是你在几个项目中有几个类名mystatus?然后他们不是同一个班级

  

所有类都有状态,但我有不同的类,我将名称作为泛型类型

传递

创建至少一个具有Status属性的接口,并使用 来约束Test中的泛型参数。