如何在c#中使用泛型,其中两个不相关的类具有相同的属性?
我正在尝试编写一个通用方法如何在c#中使用泛型,其中两个不相关的类具有相同的属性?,c#,generics,C#,Generics,我正在尝试编写一个通用方法 GenericMethod<T>(T item) where T : class { (if item.value1 == "something") doSomething } 我在StackOverflow中搜索了其他答案,并尝试实现一个接口,然后将方法定义更改为,其中T:dummyInterface 虽然这会从方法中删除错误,但在调用该方法时会出现错误: 我需要从两个不同的类调用该方法:GenericMethod(customer
GenericMethod<T>(T item) where T : class
{
(if item.value1 == "something")
doSomething
}
我在StackOverflow中搜索了其他答案,并尝试实现一个接口,然后将方法定义更改为,其中T:dummyInterface
虽然这会从方法中删除错误,但在调用该方法时会出现错误:
我需要从两个不同的类调用该方法:GenericMethod(customerRet)
和GenericMethod(vendorRet)
GenericMethod(customerRet)
引发编译错误:
accountRet should be convertible to dummyInterface
对于GenericMethod(vendorRet)
,我也收到了相同的错误
customerRet
和vendorRet
没有任何关联-没有公共接口等。您应用的约束是类
。在运行时,您可以传入任何类,这些类可能包含也可能不包含名为value1
的属性。您可以指定要使用的确切类,或者为约束指定具有属性value1
的接口。使AccountRet
和VendorRet
实现IDummyInterface
,在这种情况下,您不再需要通用方法:
PerformOperation(IDummyInterface item)
{
if (item.value1 == "something")
DoSomething();
}
或者,如果由于某种原因无法更改这两个类,则对方法进行两次重载:
PerformOperation(AccountRet item)
{
if (item.value1 == "something")
DoSomething();
}
PerformOperation(VendorRet item)
{
if (item.value1 == "something")
DoSomething();
}
您的原始代码无法编译,因为编译器无法在编译时证明泛型
t
类上存在属性Value1
——事实上,在没有约束的情况下,任何任意t
都不是这种情况。我在两个不同的调用中传递两个单独的类。所以传递精确类不是一个选项。当我使用interface时,调用我提到的方法时会出现错误。要使用此泛型方法的任何类型都必须具有value1
。你将如何确保这一点?因此,类customerRet
和vendorRet
都应该实现这个包含value1
的接口。您需要在不同的类上执行很多操作吗?还是这只是一个一次性操作?
PerformOperation(AccountRet item)
{
if (item.value1 == "something")
DoSomething();
}
PerformOperation(VendorRet item)
{
if (item.value1 == "something")
DoSomething();
}