电子说
最近有项目的个别需求需要使用.net中的一些东西来实现,如其中需要用到泛型集合List
忽然想起之前有小伙伴在群里也问过这个问题,当时我好像给出了错误的答案,故总结一下顺便纠正之前的错误。
看完这个激动不已,在System命名空间中通过Activator.CreateInstance 静态方法进行创建,在.net函数选板中找到Invoke Node,然后在右键菜单中找到“Select Class >> .NET >> Browse...”,如下图所示:
在弹出的对话框中,找到Assembly选中mscorlib(4.0.0),并在下面的列表中找到System,如下图所示:
双击展开System命名空间,找到Activator,如下图所示:
然后鼠标左键单击Method,选择CreateInstance(Type type),如下图所示:
此时发现改方法需要传入Type参数,按图索骥找到了System命名空间中的GetType(String)静态方法,如下图所示:
找到改静态方法的方式同上述CreateInstance(Type type)一样,这里不再赘述,如下图所示:
此时发现改方法需要传入typeName参数,其实就是类型的程序集限定名称,
文档中给出了参考代码,如下图所示:
using System; using System.Collections.Generic; using System.Globalization; public class Example { public static void Main() { Type t = typeof(String); ShowTypeInfo(t); t = typeof(List<>); ShowTypeInfo(t); var list = new List(); t = list.GetType(); ShowTypeInfo(t); Object v = 12; t = v.GetType(); ShowTypeInfo(t); t = typeof(IFormatProvider); ShowTypeInfo(t); IFormatProvider ifmt = NumberFormatInfo.CurrentInfo; t = ifmt.GetType(); ShowTypeInfo(t); } private static void ShowTypeInfo(Type t) { Console.WriteLine($"Name: {t.Name}"); Console.WriteLine($"Full Name: {t.FullName}"); Console.WriteLine($"ToString: {t}"); Console.WriteLine($"Assembly Qualified Name: {t.AssemblyQualifiedName}"); Console.WriteLine(); } } // The example displays output like the following: // Name: String // Full Name: System.String // ToString: System.String // Assembly Qualified Name: System.String, mscorlib, Version=4.0.0.0, Culture=neutr // al, PublicKeyToken=b77a5c561934e089 // // Name: List`1 // Full Name: System.Collections.Generic.List`1 // ToString: System.Collections.Generic.List`1[T] // Assembly Qualified Name: System.Collections.Generic.List`1, mscorlib, Version=4. // 0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // // Name: List`1 // Full Name: System.Collections.Generic.List`1[[System.String, mscorlib, Version=4 // .0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] // ToString: System.Collections.Generic.List`1[System.String] // Assembly Qualified Name: System.Collections.Generic.List`1[[System.String, mscor // lib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorl // ib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 // // Name: Int32 // Full Name: System.Int32 // ToString: System.Int32 // Assembly Qualified Name: System.Int32, mscorlib, Version=4.0.0.0, Culture=neutra // l, PublicKeyToken=b77a5c561934e089 // // Name: IFormatProvider // Full Name: System.IFormatProvider // ToString: System.IFormatProvider // Assembly Qualified Name: System.IFormatProvider, mscorlib, Version=4.0.0.0, Cult // ure=neutral, PublicKeyToken=b77a5c561934e089 // // Name: NumberFormatInfo // Full Name: System.Globalization.NumberFormatInfo // ToString: System.Globalization.NumberFormatInfo // Assembly Qualified Name: System.Globalization.NumberFormatInfo, mscorlib, Versio // n=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
我们在传入改typeName参数时,传入Full Name即可,如果你不知道你想创建的类型的Full Name可以先修改参考代码并执行,即可获取。比如我想创建List
实际使用中我想创建的是List>对象,如下图所示:
理解之后你就可以创建原本你以为无法创建的对象实例了。
审核编辑:刘清
全部0条评论
快来发表一下你的评论吧 !