我有这种具有通用接口的通用方法:
private TP GetSettings<T, TP>( ) where T : IProjectSettings<TP>, new()
{
var userSetting = new T();
return userSetting.DefaultProjectSettings;
}
我从该通用接口继承了此类:
internal class FutureAllowedDaysSettings : IProjectSettings<int>
{
public string Name => "FutureAllowedDays";
public int DefaultProjectSettings => 1;
}
通用接口
public interface IProjectSettings<T>
{
string Name { get; }
T DefaultProjectSettings { get; }
}
现在我想使用这种方法:
int res = GetSettings<FutureAllowedDaysSettings>();
但是我不能。我总是需要像这样传递第二种类型:
int res = GetSettings<FutureAllowedDaysSettings,int>();
但这很奇怪。 FutureCheckSettings是IProjectSettings,因此编译器应该知道第二种类型是int。因为如果我尝试将bool更改为int,就这样:
bool int = GetSettings<FutureAllowedDaysSettings,bool>();
我会得到错误: 类型参数数量不正确
为什么会发生这种情况,是否可以仅通过一种类型(FutureAllowedDaysSettings)调用此方法?如果没有,如何更改我的代码以使其成为可能?