Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 转换字符串->;用于泛型的类型_C#_String_Generics_Syntax_Types - Fatal编程技术网

C# 转换字符串->;用于泛型的类型

C# 转换字符串->;用于泛型的类型,c#,string,generics,syntax,types,C#,String,Generics,Syntax,Types,我试图通过一个同名字符串将类型和引用传递给泛型: IE:string ButtonName==“ActionOne”~~~~~>>类型==ActionOne,引用==ActionOne 可悲的是,我不知道正确的语法是什么,我很难通过谷歌找到它,所以如果有人知道如何做到这一点,或者至少知道它叫什么,这将有很大帮助 谢谢,这里有一些我正在尝试做的sudo代码 public class ActionPanelButton : *NotImportant* { private string Bu

我试图通过一个同名字符串将类型和引用传递给泛型:

IE:string ButtonName==“ActionOne”~~~~~>>类型==ActionOne,引用==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));
    }
}
公共类ActionPanelButton:*不重要*{
私有字符串按钮名;
私有类型按钮类型;
void ActionPanelButton(){
ButtonName=this.Button.name;//这是返回用户设置的字符串
ButtonType=Type.GetType(ButtonName);
ActionPanel=this.Button.parent.ActionPanel;//这将返回包含的面板对象
}   
public void LeftClick(){//这与任何ol OnClick一样响应
ActionPanel.ChangeSelectedActionBundle(ActionPanel.DisplayedActionPanel.(ButtonType));
}
}
公共课行动小组

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);
    }
public void ChangeSelectedActionBundle(T action){
类型typeOfObject=typeof(ActionBundle);
动作类型=动作类型(T);
FieldInfo字段=typeOfObject.GetField(typeOfAction.Name);
field.SetValue(SelectionManager.SelectedActionBundle,action);
}

泛型函数实际上更多的是编译器功能,而不是运行时功能。当编译器运行到以下代码中时:

myObj.Foo<Int32>(123);

也许您不必使用
对象
,而可以使用所有操作、use或接口的通用基类。

由于泛型通过编译器工作,因此需要在编译时知道类型。除了使用反射,做你正在做的事情并不是一个简单的方法。我很难理解你在追求什么。你能改变一下这个例子吗?虽然你所追求的更多是反射,但它确实出现了。。不是泛型。我一回到家,就会扩展我的上下文!!谢谢你的帮助@Burdock-他们想基于一个只有在运行时才知道的类型调用一个泛型方法。@MikeChristensen说得对~让我检查我的代码,我会更新帖子。。。
public void ChangeSelectedActionBundle(object action)
{
   Type typeOfObject = typeof(ActionBundle);
   Type typeOfAction = action.GetType();

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