c# - 如何模拟(没有任何模拟框架)其类型参数的特定值的通用函数
问题描述
我需要创建给定数据库的模拟实例,其接口是通用的func<T>(param1, param2,...)
问题是,我想对某些值和某个 T 值给出一个具体的答案。
我怎样才能做到这一点?(我需要一个真正的常规类来实现该接口,而不是 NSubstitute\Mock 类)
我尝试创建两个函数,一个具有通用签名,一个具有具体签名,但编译器似乎无法识别它是同一接口函数的实现)
public interface IManager
{
T func<T>(string parameter);
}
解决方案
假设 Foo 是您的“T 的确定值”。只需将一个实例实例化为实现您的接口的具体类。
IManager manager = new ConcreteManager()
Foo foo = manager.func<Foo>("input value");
在哪里
public class ConcreteManager : IManager
{
public T func<T>(string parameter)
{
// Implementation here
}
}
请记住,实现通常是适用于任何类型 T 的代码。
请参阅 List 类示例:https ://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs
您真的不想必须执行以下操作(尽管我确信您将能够找到这样做的代码)。
public T func<T>(string parameter)
{
Type listType = typeof(T);
if(listType == typeof(int))
{
...
}
...
}
推荐阅读
- mysql - JOIN 不等于?
- javascript - 当节点/属性名称是变量/参数时寻找 eval() 替代方案
- apexcharts - Apexcharts,如何找到线上最高和最低标记的位置值,以便我可以将图像添加到该特定标记?
- r - R 和 GNU Parallel - 如何限制使用的核心数量
- html - 将符号附加到导致值的输入末尾
- python - 如何在 python 中同时运行这两个命令?
- kdb - 如何获取列表的前十项并将它们转换为日期 kdb
- c# - 由于数据表分页,Foreach 没有从 gridview 获取所有值
- java - React.js 如何定义自定义id,而不是在html中显示react-select-1--value
- pandas - 如何用字符串“None”替换 Pandas 数据框中的所有 NaN