将当前类/对象的类型传递给C#程序中没有显式类型引用的泛型方法?

时间:2013-02-08 21:49:28

标签: c# generics types

在调用泛型方法时,是否可以使用当前类/对象类型的简写,而不必显式传递当前类/对象的名称?

例如,给出以下示例代码:

public class SomeClass
{
    public SomeClass()
    {
        // Call some generic method that returns a string.
        string s = GenMeth<SomeClass>)();
    }
} // public class SomeClass

有没有办法告诉C#我想将当前类(SomeClass)的类传递给GenMeth()而不必明确说出 SomeClass

一个假设和虚假的例子说明了这个概念:

string s = GenMeth<GetType(this)>();

3 个答案:

答案 0 :(得分:2)

如果你让你的方法使用该类型的实例,它可以推断它。例如,如果您的方法如下:

void GenMeth<T>(T instance) {}

然后你可以调用它:

GenMeth(this);

这对你来说是否可以接受可能是另一回事。 (如果你从未消费过这个论点,那会有点奇怪)

答案 1 :(得分:1)

不,没有这样的语法。

理论上,您可以通过反射调用该方法,从而允许您使用this.GetType(),但这会让事情变得更糟,对您来说更糟糕。只是......不要那样做。如果复制/粘贴代码,只需记住将通用参数更改为当前类型就更容易

答案 2 :(得分:0)

您可以创建一个扩展方法,执行您对任何对象的操作。您可以使用GetType()检查合法类型的扩展方法。

public static class ObjectExtensions {

  public static string GenMeth(this object obj) {
    // do stuff here and return string type
  }
}