在返回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()
    };

这显然是行不通的,但有人知道我是如何做到这一点的吗?

在返回Func的静态字段中使用未知的泛型接口

不能有泛型字段;但是,可以将其推送到通用静态类型:

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);