Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# 如何从通用接口调用InterfaceMethods_C# - Fatal编程技术网

C# 如何从通用接口调用InterfaceMethods

C# 如何从通用接口调用InterfaceMethods,c#,C#,比如说,我有一个通用接口 IWhatEver:where T:。。。。 { T DoStuff(对象值); } 类Foo:IWhatEver{…} 类栏:IWhatEver{…} 这个接口由几个类实现 如何在列表中存储此接口的实例,以及如何调用DoStuff函数 大概是这样的: List>();//不起作用。。。 添加(新的Foo()); 添加(新条()); var whatwillhisbe=whatEvers.Select(w=>w.DoStuff(带someobject)); 我相信这

比如说,我有一个通用接口

IWhatEver:where T:。。。。
{
T DoStuff(对象值);
}
类Foo:IWhatEver{…}
类栏:IWhatEver{…}
这个接口由几个类实现

如何在列表中存储此接口的实例,以及如何调用DoStuff函数

大概是这样的:

List>();//不起作用。。。
添加(新的Foo());
添加(新条());
var whatwillhisbe=whatEvers.Select(w=>w.DoStuff(带someobject));

我相信这是不可能的,但也许我忘了什么?

一个选项是创建一个非泛型的基本接口并从中继承泛型

IWhatEver 
{
    object DoStuff(object value);
}

IWhatEver<T> : IWhatEver where T : ....
{
    new T DoStuff(object value);
}

不,不太可能。您需要从非泛型接口继承泛型接口,这将引入另一个复杂的堆,并为您的方法返回值,et c.=)使用
dynamic
?在那种情况下不能使用dynamic…很遗憾。是的,我正在考虑这种方法,但我需要将接口添加到现有类中。我想我会将其更改为Object,并且不使用任何泛型:/
abstract class BaseWhatEver<T> : IWhatEver<T>
{
    abstract T DoStuff(object value);

    object IWhatEver.DoStuff(object value)
    {
          return ((IWhatEver<T>) this)DoStuff(value);
    }
}