当前位置:  开发笔记 > 编程语言 > 正文

如何从字符串中实例化类型及其值?

如何解决《如何从字符串中实例化类型及其值?》经验,为你挑选了1个好方法。

我有类似这样的代码:

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时,从字符串中解析类型值.



1> Jon Skeet..:

得到一个类型: 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());
    }
}

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有