使用泛型类型执行Func,该类型应返回long值

时间:2017-03-01 10:12:49

标签: c# .net

我有一个以Func<T, long>为参数的方法。我想这样称呼这个方法:

Write(x => x.Id, "Some info");

该方法如下所示。我遇到的问题是在那个方法里面。我不知道如何执行该函数来获取long值。

public void Write<TEntity>(Func<TEntity, long> func, string info)
{
    var id = func(); // Doesn't work, func() needs an argument...
}

这是如何工作的?我该如何执行该功能?

1 个答案:

答案 0 :(得分:2)

当然它不起作用,你需要n个参数。解决方案取决于你将要做什么。

1)您可以将TEntity作为参数:

public void Write<TEntity>(Func<TEntity, long> func, TEntity entity, string info)
{
    var id = func(entity);
}

2)如果此函数在TEntity类中,您可以使用以下参数调用它:

class TEntity
{
  public void Write<TEntity>(Func<TEntity, long> func, string info)
  {
      var id = func(this);
  }
}

3)也许你不需要任何TEntity来获取Id,在这种情况下,将你的参数重写为没有参数的func:

public void Write<TEntity>(Func<long> func, string info)
{
    var id = func();
}