我有类似这样的代码:
class Foo { Dictionary_dict; void Create(string myType, string myValue) { var instance = Type.Instanciate(myType) // How do I do this? if (var.IsPrimitive) { var.GetType().Parse(myValue) // I know this is there...how to invoke? Dictionary[instance.GetType()] = instance; } } T GetValue (T myType) { return (T)_dict[T]; } } // Populate with values foo.Create("System.Int32", "15"); foo.Create("System.String", "My String"); foo.Create("System.Boolean", "False"); // Access a value bool b = GetValue(b);
所以我的问题是:
a)如何实例化类型
b)当支持Parse时,从字符串中解析类型值.
得到一个类型: Type.GetType()
从Type对象实例化一个类型:( Activator.CreateInstance
在代码中实际上并不需要这个.)
从字符串转换: Convert.ChangeType
请注意,如果类型不在mscorlib
或当前正在执行的程序集,则需要包含程序集名称(如果名称强烈,则需要包含版本信息).
这是使用原始代码的完整示例.请注意,GetValue
不需要普通参数,因为您已经给出了类型参数(T).
using System; using System.Collections.Generic; public class Foo { Dictionary_dict = new Dictionary (); public void Create(string myType, string myValue) { Type type = Type.GetType(myType); object value = Convert.ChangeType(myValue, type); _dict[type] = value; } public T GetValue () { return (T)_dict[typeof(T)]; } } class Test { static void Main() { Foo foo = new Foo(); // Populate with values foo.Create("System.Int32", "15"); foo.Create("System.String", "My String"); foo.Create("System.Boolean", "False"); Console.WriteLine(foo.GetValue ()); Console.WriteLine(foo.GetValue ()); Console.WriteLine(foo.GetValue ()); } }