如何在c#中将字符串转换为类引用?
在c#中,我正在从事一项基于文本的冒险活动,其中每个互动程序都由一个类表示。在我的主类中,我插入了一种从控制台读取的方法,在我称为tile loader的类中,我有一个更新函数。此函数从开始读取的输入中获取字符串。当我调用它时,我希望字符串被转换成一个类引用,这样我就可以调用这个类,并且每个tile类中都有一个load函数。我可以直接插入很多if,但我真的不想这么做。我知道有一个更简单的方法。你可以用它来做这件事 您将需要提供程序集名称或引用,并且可能需要为类添加命名空间,除非您希望在命令行中提供完全限定的类 例如,假设类如何在c#中将字符串转换为类引用?,c#,string,class,reference,C#,String,Class,Reference,在c#中,我正在从事一项基于文本的冒险活动,其中每个互动程序都由一个类表示。在我的主类中,我插入了一种从控制台读取的方法,在我称为tile loader的类中,我有一个更新函数。此函数从开始读取的输入中获取字符串。当我调用它时,我希望字符串被转换成一个类引用,这样我就可以调用这个类,并且每个tile类中都有一个load函数。我可以直接插入很多if,但我真的不想这么做。我知道有一个更简单的方法。你可以用它来做这件事 您将需要提供程序集名称或引用,并且可能需要为类添加命名空间,除非您希望在命令行中提
Test
位于名为WindowsFormsApplication1
的程序集中,并且用户条目位于名为sInputClassName
的变量中,则以下代码将在oClass
变量中创建该类的实例:
// What the user entered
var sInputClassName = "Test";
// The name of the assembly; there are other ways to get this, such as through reflection
const string CLASS_ASSEMBLY_NAME = "WindowsFormsApplication1";
// Get the requested type from the entered class name and assembly name
var oType = Type.GetType(CLASS_ASSEMBLY_NAME + "." + sInputClassName, true);
if (oType != null) {
// Once we have the class type, create an instance of it
var oClass = Activator.CreateInstance(oType, false);
if (oClass != null) {
System.Diagnostics.Debug.WriteLine("Created " + sInputClassName);
} else {
System.Diagnostics.Debug.WriteLine("Could not create " + sInputClassName);
}
} else {
System.Diagnostics.Debug.WriteLine("Could not find " + sInputClassName);
}
最简单的方法是…一个字典(键=字符串,值=类的类型)。你也可以考虑反射(按名称或属性)。第一个解决方案更容易实现,但更难维护,第二个更容易扩展,但(IMO,有点)更容易出错(例如,因为本地化),例如(使用反射),请查看我不久前在这里发布的一个类似问题。代码很原始,所以把它当作一个起点。抱歉。我是c#的新手。我只是想知道你能否给我举个简单的例子,说明我是如何做到这一点的。欢迎你!请点击链接,这里有一些代码。谢谢。我会检查它。顺便说一句,我建议始终将
true
作为第二个参数传递给Type.GetType
,如果由于某种原因无法加载该类型,则会导致它抛出一个描述良好的异常。我是根据经验说的,当您返回的全部为空时,调试生产代码中的类型加载错误非常烦人——烦人,因为如果某个开发人员多键入六个字符,我就可以节省很多时间。@MichaelLiu:捕捉得好,信息非常有用。我更新了答案以反映这一点。