这种通用扩展方法的目的是什么?

时间:2016-01-22 13:50:18

标签: c# generics extension-methods

我在这里坚持一些遗留代码,我无法弄清楚。它有什么作用?任何帮助表示赞赏!

public static T ResolveNew<T>(this T type)
{
    return UnityContainerHandler.Create().Resolve<T>();
}

1 个答案:

答案 0 :(得分:2)

此代码通过捕获作为参数传递给它的静态已知类型的对象来解析类型T。对象本身被忽略。

换句话说,你可以这样做:

MyClass obj = new MyClass();
MyClass res = obj.ResolveNew();

这会调用扩展名ResolveNew<MyClass>,而后者又会返回

UnityContainerHandler.Create().Resolve<MyClass>();

这种方法的效用充其量是可疑的,因为参数type的值被删除了。编写不同的实用程序

public static T ResolveNew<T>() {
    return UnityContainerHandler.Create().Resolve<T>();
}

并像这样调用它

var res = Util.ResolveNew<MyClass>(); // assuming Util is the name of the static class

会在不降低可读性的情况下产生相同的结果。