TResponse必须是具有无参数构造函数的非抽象类型,以便将其用作参数TResponse
本文关键字:参数 TResponse 类型 抽象类 构造函数 抽象 | 更新日期: 2023-09-27 18:07:01
我正在尝试创建一个函数,如
public static TResponse Run<TService, TResponse>(Controller mvcController, IServiceController serviceController, Func<TService, TResponse> action, bool suppressErrors)
where TService : ICommunicationObject
where TResponse : ResponseBase<TResponse>
{
TResponse response = serviceController.Run<TService, TResponse>(action);
if (!suppressErrors)
response.Result.Errors.ToList().ForEach(i => mvcController.ModelState.AddModelError(UniqueKey.ValidationMessage, i.Message));
return response;
}
和class被定义为
[DataContract]
public class ResponseBase<T> where T: new()
{
public ResponseBase()
{
Result = new Result<T>();
}
[DataMember]
public Result<T> Result { get; set; }
}
我得到编译错误,因为TResponse必须是一个非抽象类型,具有无参数构造函数,以便将其用作参数TResponse
虽然您已经在ResponseBase<T>
中为T
定义了new()
约束,但编译器要求您在一般使用ResponseBase<T>
的其他类中声明相同的约束。
你所要做的就是在你的方法中添加new()
约束到TResponse
:
public static TResponse Run<TService, TResponse>(Controller mvcController, IServiceController serviceController, Func<TService, TResponse> action, bool suppressErrors)
where TService : ICommunicationObject
where TResponse : ResponseBase<TResponse>, new()