C# - Generic按参数返回类型的方法

Igo*_*gor 2 c# generics methods

我有这个通用的方法:

    public static T FindObject<T> (this GameObject gameObject, string objectName, Type type)
    {

       var ret = gameObject.GetComponentsInChildren(type).Where(w => w.name == objectName).First();

       return (T)Convert.ChangeType(ret, type);

    }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我这样称呼它:

var myVar = UI_POINTS.FindObject("Score", typeof(Text));
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

但我给出以下错误:

无法从用法中推断出方法'ExtensionMethods.FindObject(GameObject,string,Type)'的类型参数.尝试显式指定类型参数.

为什么他不懂方法调用?

先感谢您.

Wil*_*den 8

编译器不知道是什么T原因,因为你没有告诉它,它无法从方法的参数推断它.你已经将一个Type对象作为参数传递给了它,但编译器应该如何知道这是指T?

事实上,我也是这样做的 - 如果这是意图,我无法从你的代码中确定.如果是,请尝试这样做:

public static T FindObject<T> (this GameObject gameObject, string objectName)
{
   var type = typeof(T);
   var ret = gameObject.GetComponentsInChildren(type).Where(w => w.name == objectName).First().gameObject;

   return (T)Convert.ChangeType(ret, type);

}
Run Code Online (Sandbox Code Playgroud)

其次是:

var myVar = UI_POINTS.FindObject<Text>("Score");
Run Code Online (Sandbox Code Playgroud)