4

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

例如,给定下面的示例代码:

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

3 回答 3

2

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

void GenMeth<T>(T instance) {}

然后你可以像这样调用它:

GenMeth(this);

您是否可以接受这可能是另一回事。(如果您从未使用过参数会有点奇怪)

于 2013-02-08T21:53:43.093 回答
1

不,没有这样的语法。

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

于 2013-02-08T21:52:19.473 回答
-1

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

public static class ObjectExtensions {

  public static string GenMeth(this object obj) {
    // do stuff here and return string type
  }
}
于 2013-02-08T21:56:08.947 回答