如何在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();
}