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

本文关键字:类型 程序 泛型方法 引用 对象 | 更新日期: 2023-09-27 17:58:19

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

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

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

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

如果你让你的方法使用该类型的实例,它可以推断它。例如,如果你的方法看起来像:

void GenMeth<T>(T instance) {}

然后你可以调用它,比如:

GenMeth(this);

你是否能接受这一点可能就另当别论了。(如果你从未使用过这个参数,那就有点奇怪了)

不,没有这样的语法。

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

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

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