没有从“ int”到“ T”的拳击转换

时间:2018-06-20 13:50:09

标签: c# generics inheritance interface cycle

我有一个通用方法:

public JobKey Queue<TRequest>(TRequest request) where TRequest : IJobRequest{}

IJobRequest:

 public interface IJobRequest
    {

    }

接下来,在foreach周期中,我想调用Queue<>()通用方法:

foreach (var item in campaigns)
                {
                    _jobScheduler.Queue<>();
                }

“ item”变量是我的自定义类型“ Campaign”,并且具有属性int Id

foreach周期中,我想将item.Id之类的参数传递给Queue<>()方法。

_jobScheduler.Queue<int>(item.Id);

我应该在interface IJobRequest中进行哪些更改才能做到:_jobScheduler.Queue<int>(item.Id);因为现在我遇到一个错误:“没有从“ int”到“ IJobRequest”的装箱转换”

1 个答案:

答案 0 :(得分:1)

您有约束TRequest : IJobRequest,这意味着type参数应该继承/实现接口IJobRequest,显然int类型不会继承该接口。

您需要创建一个从该接口继承的类型,然后可以在方法调用中将该类型用作参数。

仅作为示例来说明它,就像:

public class MyType : IJobRequest
{

}

然后:

 MyType instance = new MyType();
_jobScheduler.Queue<MyType>(instance);

您还需要在类型参数上应用new() constraint,以允许在无参数构造函数中使用类型。

或者,您也可以删除通用参数上的约束:

public JobKey Queue<TRequest>(TRequest request)

希望它能给您带来灵感。