我如何解决C#在Generic类型上调用静态函数的限制

Sam*_*ham 1 c# generics extension-methods

我有以下扩展方法,并希望使它更通用,所以我不必为我们域中的每个类实现它.

public static IList<User> ToList(this DataTable table)
{
    IList<User> users = new List<User>();

    foreach (DataRow row in table.Rows)
        users.Add(User.FromDataRow(row));

    return users;
}
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个令人沮丧的限制?

编辑:下面的段落是bollocks,但我保留它,所以其中一个答案对未来的读者有意义:

用户以及我的其他类实现IDataModel. IDataModel只需要1种方法FromDataRow(DataRow row).在函数原型中放置一个显然没有帮助.

Mar*_*ell 9

当你只需要一个方法时,想想Func ......也许是一个 Func<DataRow, T>

public static IList<T> ToList<T>(this DataTable table,
      Func<DataRow,T> converter)
{
    IList<T> list = new List<T>();

    foreach (DataRow row in table.Rows)
        list.Add(converter(row));

    return list;
}
Run Code Online (Sandbox Code Playgroud)

然后打电话 table.ToList<User>(User.FromDataRow)