0

我试图通过同名的字符串传递类型和对泛型的引用:

IE: string ButtonName == "ActionOne" ~~~~~>> Type == ActionOne, reference == ActionOne

可悲的是,我不知道正确的语法是什么,并且很难通过谷歌找到它,所以如果有人知道如何做到这一点,或者至少知道它叫什么,那将有很大帮助!

谢谢,这是我正在尝试做的一些 sudo 代码!

public class ActionPanelButton : *NotImportant* {
    private string ButtonName;
    private Type ButtonType; 

    void ActionPanelButton(){
            ButtonName = this.Button.name; // This is return a string set by the user
            ButtonType = Type.GetType(ButtonName);
            ActionPanel = this.Button.parent.ActionPanel;  //  This will return the containing panel object 
    }   

    public void LeftClick(){ //This responds like any-ol OnClick

        ActionPanel.ChangeSelectedActionBundle<(ButtonType)>(ActionPanel.DisplayedActionPanel.(ButtonType));
    }
}

公共类 ActionPanel....

public void ChangeSelectedActionBundle <T> (T action){

        Type typeOfObject = typeof(ActionBundle);
        Type typeOfAction = typeof(T);

        FieldInfo field = typeOfObject.GetField(typeOfAction.Name);
        field.SetValue(SelectionManager.SelectedActionBundle, action);
    }
4

1 回答 1

1

泛型函数实际上更像是编译器功能而不是运行时功能。当编译器遇到如下代码时:

myObj.Foo<Int32>(123);

它将创建一个Foo使用 anInt32而不是T. 因此,您不能使用仅称为运行时的类型调用泛型函数。

但是,我质疑您为什么需要这样做。您已经在方法中使用了反射ChangeSelectedActionBundle。关于它的任何内容都不需要是通用的。你可以这样做:

public void ChangeSelectedActionBundle(object action)
{
   Type typeOfObject = typeof(ActionBundle);
   Type typeOfAction = action.GetType();

   FieldInfo field = typeOfObject.GetField(typeOfAction.Name);
   field.SetValue(SelectionManager.SelectedActionBundle, action);
}

object也许您可以使用所有操作、使用或接口通用的基类,而不是使用。

于 2013-09-24T22:56:03.637 回答