Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.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# c不能从';界面<;IOtherInterface>';至';IInterface-将不带泛型的类转换为带泛型的接口_C#_.net_Generics_Interface - Fatal编程技术网

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