【发布时间】:2021-05-05 10:39:51
【问题描述】:
我有这样的事情:
interface IArgument{ ... }
class ArgumentA : IArgument{ ... }
abstract class Parameter<T> where T : class, IArgument{
...
abstract decimal GetValue(T args);
...
}
class ParameterA : Parameter<ArgumentA>{
override decimal GetValue(ArgumentA args){
...
}
}
abstract class Calculation{
List<Parameter<IArgument>> Parameters{get;set;}
decimal FindParameterValue<T>() where T : Parameter<IArgument>{
...
}
}
方法 FindParameterValue 是我遇到问题的地方。它从列表中获取特定类型的第一个参数并返回其值。
现在我得到这个错误:
Error CS0311 The type 'ParameterA' cannot be used as type parameter 'T' in the generic type or method 'Calculation.FindParameterValue<T>()'. There is no implicit reference conversion from 'ParameterA' to 'Parameter<IArgument>'. 。
我只想提供一个实现 Parameter
public decimal FindParameterValue<T,U>() where T : Parameter<U> where U : class, IArgument
这让我这样称呼它:
FindParameterValue<ParameterA, ArgumentA>();
但我想只使用“ParameterA”类型来调用它。
对不起,如果这已经在某个地方解决了。
提前致谢!
【问题讨论】:
标签: c# generics constraints