我的课程中有以下静态字段
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()
};
这显然不起作用,但有谁知道我怎么能实现这个目标?
答案 0 :(得分:1)
你不能拥有通用字段;但可以,将其推送到通用静态类型:
static class Foo<T> {
internal static readonly Func<IDataReader, IDefinition<T>> Make = reader =>
new Definition<T> {
Name = reader["DefinitionName"].AsId()
};
}
并使用
Foo<YourType>.Make
你可能想整理一下(内部领域等)
答案 1 :(得分:0)
您还可以将字段转换为通用方法:
private static IDefinition<T> Make<T>(IDataReader reader)
{
new Definition<T>
{
...
};
}
// call
var definition = Make<SomeType>(reader);
如果你已经有类型T的东西,你可以制作一个从使用中推断出来的方法:
private static IDefinition<T> Make<T>(IDataReader reader, T something)
{
new Definition<T>
{
...
};
}
// call
var definition = Make(reader, someInstanceT);