c# - 使用只有一个类型参数 C# 的泛型接口调用泛型方法
问题描述
我有这个带有通用接口的通用方法:
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)/如果不是,我该如何更改我的代码以使其成为可能?
解决方案
推荐阅读
- java - java - 如何在Java中进行测验,在每个问题之前播放声音?
- vue.js - 如何使用 vuex 从命名空间模块访问 getter?
- git - git branch -r --merged 显示未合并的分支
- mysql - 事件调度器关闭的原因是什么?
- python - 使用“dict of dicts”或“list of dicts”在python中存储来自CSV的数据?
- python - pandas.ExcelWriter set_rotation 不旋转文本
- javascript - 使用 getstream 实时评论
- webpack - 如何忽略 Quasar 的 webpack 中的“fs”模块
- python - parse_args 在命名空间中不包括 None 值
- powershell - 需要搜索 csv 文件并对值运行 if/Where 语句以初始化 bat 文件