C# c不能从';界面<;IOtherInterface>';至';IInterface-将不带泛型的类转换为带泛型的接口
我有接口C# c不能从';界面<;IOtherInterface>';至';IInterface-将不带泛型的类转换为带泛型的接口,c#,.net,generics,interface,C#,.net,Generics,Interface,我有接口IJob,它是我的许多函数中的一个参数。但是这个接口实际上是通用的(IJob)。我希望避免将泛型参数传递给所有函数。所以我做了如下的事情: 公共接口类型 { 字符串X{get;set;} } 公共接口IJob 其中T:ISomeType { 字符串SomeProp{get;set;} T GenericProp{get;set;} } 公共接口IJob:IJob{} 公开课工作:IJob 其中T:ISomeType { 公共字符串SomeProp{get;set;} 公共T Generi
IJob
,它是我的许多函数中的一个参数。但是这个接口实际上是通用的(IJob
)。我希望避免将泛型参数传递给所有函数。所以我做了如下的事情:
公共接口类型
{
字符串X{get;set;}
}
公共接口IJob
其中T:ISomeType
{
字符串SomeProp{get;set;}
T GenericProp{get;set;}
}
公共接口IJob:IJob{}
公开课工作:IJob
其中T:ISomeType
{
公共字符串SomeProp{get;set;}
公共T GenericProp{get;set;}
}
公共类作业:作业{}
公共类SomeOtherType:ISomeType
{
公共字符串X{get;set;}
公共字符串Y{get;set;}
}
现在我的函数如下所示:
public void DoSomething(IJob作业){
//而不是:
公共无效剂量(IJob作业)
其中T:ISomeType{}
我想这样做是因为这些函数从未接触过GenericProp
——它们只需要知道T
是isomtype
一切都很好,但我遇到了以下问题:
我想将所有作业存储在IDictionary Jobs
中,但在运行前我不知道GenericProp
的类型。因此,我需要将作业
转换为IJob
,以便将其添加到字典中,但这会引发转换错误
IJob作业=(IJob)新作业();
总的来说,我觉得我的解决方案不是最佳实践。但是我该如何处理多态类呢?您好,也许可以使用继承,谢谢您的awnser@IronMan!你能更具体地解释一下我应该使用哪种方法吗?我不能使用ConvariaceMaybe让泛型扩展非泛型接口?这也不起作用。因为我必须用如下新关键字隐藏
ISOMTYPE GenericProp{get;set,}
:new T GenericProp{get;set,}
。因此,如果我从IJob
转换到IJob