是否可以在传递给泛型方法的类型上调用方法?

时间:2009-07-08 13:47:24

标签: c# generics

是否可以调用传递给泛型方法的类型的方法?

类似的东西:

public class Blah<T>
{

    public int SomeMethod(T t)
    {
          int blah = t.Age;
          return blah;

    }

 }

3 个答案:

答案 0 :(得分:19)

如果有某种类型将T约束为:

,则可以
public int SomeMethod(T t) where T : ISomeInterface
{
    // ...
}

public interface ISomeInterface
{
    int Age { get; }
}

类型可以是基类 - 但必须有某些让编译器知道肯定会有Age属性。

(在C#4中你可以使用动态类型,但我不会这样做,除非它是一个特别“特殊”的情况,实际上是合理的。)

答案 1 :(得分:9)

扩展Jon的答案。

另一种方法是对问题采取功能性方法

public int SomeMethod(T t, Func<T,int> getAge) {
  int blah = getAge(t);
  ...
}

答案 2 :(得分:3)

怎么样:

public class Blah
{
  public int SomeMethod(Func<int> get_age)
  {
    int blah = get_age();
    return blah;
  }
}