我有下一个结构:
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都有状态,但我有不同的类,我将名称作为泛型传递。
答案 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
中的泛型参数。