C# 使用只有一个类型参数C的泛型接口调用泛型方法#

C# 使用只有一个类型参数C的泛型接口调用泛型方法#,c#,generics,inheritance,interface,C#,Generics,Inheritance,Interface,我有一个通用接口的通用方法: private TP GetSettings<T, TP>( ) where T : IProjectSettings<TP>, new() { var userSetting = new T(); return userSetting.DefaultProjectSettings; } internal class FutureAllowedDaysSettings : IProjectS

我有一个通用接口的通用方法:

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;
}
private-TP-GetSettings(),其中T:IProjectSettings,new()
{
var userSetting=newt();
返回userSetting.DefaultProjectSettings;
}
我从这个通用接口继承了这个类:

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;
}
内部类未来AllowedDaySettings:IProjectSettings
{
公共字符串名称=>“FutureAllowDays”;
public int DefaultProjectSettings=>1;
}
通用接口

public interface IProjectSettings<T>
{
    string Name { get; }
    T DefaultProjectSettings { get; }
}
公共接口IProjectSettings
{
字符串名称{get;}
T DefaultProjectSettings{get;}
}
现在我想用这样的方法:

int res = GetSettings<FutureAllowedDaysSettings>();
int res = GetSettings<FutureAllowedDaysSettings,int>();
bool int = GetSettings<FutureAllowedDaysSettings,bool>();
int res=GetSettings();
但我不能。我总是需要通过第二种类型,如下所示:

int res = GetSettings<FutureAllowedDaysSettings>();
int res = GetSettings<FutureAllowedDaysSettings,int>();
bool int = GetSettings<FutureAllowedDaysSettings,bool>();
int res=GetSettings();
但这很奇怪。FutureCheckSettings是IProjectSettings,因此编译器应该知道第二种类型将是int。因为如果我尝试像这样将bool更改为int:

int res = GetSettings<FutureAllowedDaysSettings>();
int res = GetSettings<FutureAllowedDaysSettings,int>();
bool int = GetSettings<FutureAllowedDaysSettings,bool>();
bool int=GetSettings();
我将获得错误: 类型参数的数目不正确


为什么会发生这种情况?是否可以只通过一种类型调用此方法(FutureAllowEdaysSettings)/如果不可以,我如何更改代码以使其成为可能?

如果执行
class FutureAllowEdaysSettings:IProjectSettings,IProjectSettings
,会发生什么?
GetSettings
如何知道它应该返回
int
还是
double
?你说得对。那么这是不可能的?是否仅将IProjectSettings作为函数的参数传递?像
private T GetSettings(IProjectSettings设置)
?您必须指定所有泛型类型,或者必须推断所有类型。谢谢您的回答