C# 转换字符串->;用于泛型的类型
我试图通过一个同名字符串将类型和引用传递给泛型: IE:string ButtonName==“ActionOne”~~~~~>>类型==ActionOne,引用==ActionOne 可悲的是,我不知道正确的语法是什么,我很难通过谷歌找到它,所以如果有人知道如何做到这一点,或者至少知道它叫什么,这将有很大帮助 谢谢,这里有一些我正在尝试做的sudo代码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
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);
}