在返回Func的静态字段中使用未知的泛型接口
本文关键字:未知 泛型接口 字段 返回 Func 静态 | 更新日期: 2023-09-27 17:58:14
我的类中有以下静态字段
private static Func<IDataReader, Project> Make = reader =>
new Project
{
Name = reader["ProjectName"].AsId(),
StartDate = reader["StartDate"].AsDateTime(),
EndDate = reader["EndDate"].AsDateTime()
};
我正试图使用泛型接口来做同样的事情,但无法确定如何定义泛型类型。这将是类似的事情。
private static Func<IDataReader, IDefinition<T>> Make<T> = reader =>
new Definition<T>
{
Name = reader["DefinitionName"].AsId()
};
这显然是行不通的,但有人知道我是如何做到这一点的吗?
不能有泛型字段;但是,可以将其推送到通用静态类型:
static class Foo<T> {
internal static readonly Func<IDataReader, IDefinition<T>> Make = reader =>
new Definition<T> {
Name = reader["DefinitionName"].AsId()
};
}
并使用
Foo<YourType>.Make
不过,您可能需要整理一下(内部字段等)
您还可以将字段转换为通用方法:
private static IDefinition<T> Make<T>(IDataReader reader)
{
new Definition<T>
{
...
};
}
// call
var definition = Make<SomeType>(reader);
如果你已经有了T类型的东西,你可以制作一个从用法推断T的方法:
private static IDefinition<T> Make<T>(IDataReader reader, T something)
{
new Definition<T>
{
...
};
}
// call
var definition = Make(reader, someInstanceT);