在调用泛型方法时,是否可以使用当前类/对象类型的简写,而不必显式传递当前类/对象的名称?
例如,给出以下示例代码:
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)>();
答案 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
}
}