Vin*_*ent 162 .net c# string types
如果我收到一个包含类名称的字符串,并且我想将此字符串转换为实际类型(字符串中的那个),我该怎么做?
我试过了
Type.GetType("System.Int32")
Run Code Online (Sandbox Code Playgroud)
例如,它似乎工作.
但是当我尝试使用自己的对象时,它总是返回null ...
我不知道提前在字符串中会有什么,所以它是我将其转换为真实类型的唯一来源.
Type.GetType("NameSpace.MyClasse");
Run Code Online (Sandbox Code Playgroud)
任何的想法?
Jon*_*eet 362
您只能使用刚刚类型的名称(连同其命名空间,当然),如果该类型是mscorlib
或调用程序集.否则,您还必须包含程序集名称:
Type type = Type.GetType("Namespace.MyClass, MyAssembly");
Run Code Online (Sandbox Code Playgroud)
如果程序集名称很强,那么您必须包含所有这些信息.有关Type.GetType(string)
更多信息,请参阅文档.
或者,如果您已经对组件进行了引用(例如,通过众所周知的类型),您可以使用Assembly.GetType
:
Assembly asm = typeof(SomeKnownType).Assembly;
Type type = asm.GetType(namespaceQualifiedTypeName);
Run Code Online (Sandbox Code Playgroud)
aba*_*hev 30
尝试:
Type type = Type.GetType(inputString); //target type
object o = Activator.CreateInstance(type); // an instance of target type
YourType your = (YourType)o;
Run Code Online (Sandbox Code Playgroud)
Jon Skeet通常是正确的:)
更新:您可以以各种方式指定包含目标类型的程序集,如Jon所述,或:
YourType your = (YourType)Activator.CreateInstance("AssemblyName", "NameSpace.MyClass");
Run Code Online (Sandbox Code Playgroud)
Chr*_*kes 15
如果您确实想要按名称获取类型,可以使用以下内容:
System.AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes()).First(x => x.Name == "theassembly");
Run Code Online (Sandbox Code Playgroud)
请注意,您可以提供有关您尝试加载的类型的更多信息,从而大大提高性能.