将当前类/对象的类型传递给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)>();
如果你让你的方法使用该类型的实例,它可以推断它。例如,如果你的方法看起来像:
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
}
}