将字符串转换为类型

时间:2016-04-25 11:38:47

标签: c# .net unity3d

有没有办法通过使用类型名称转换字符串来在运行时指定类型?我跳下面的非编译代码可以解释我想要做什么。让我知道其他情况,并试图更好地解释它。

var valueFromDropDownMenu = "MyClass";

List<Type.GetType(valueFromDropDownMenu)> dynamicList = 
  new List<Type.GetType(valueFromDropDownMenu) > (); 

// Code to iterate through objects and populate dynamicList 
// with all objects of correct type

我要做的是让用户选择我将处理的对象类型。

我正在使用Unity3D这是一个游戏开发框架,它使用静态方法从文件加载资源。需要投射这些资源。

我试图制作一个开发人员工具,让开发人员选择要加载的特定类型的资源。所以我需要做一些像

这样的事情
var files = LoadAll("Path, ofType(UserSelectedType)); 

有可能吗?

1 个答案:

答案 0 :(得分:1)

泛型的全部意义在于提供编译时输入。尝试以您描述的方式使用泛型失败了。

它无法编译,因为您尝试将运行时类型与编译时键入混合在一起。

即使这确实有效,它也只会增加使用简单List<object>的不必要的开销,然后可以在运行时查询类型信息。 (注意,编译时间显然总是优于性能)

以下代码将在控制台输出一行。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication9
{
    class Program
    {
        static void Main(string[] args)
        {

            List<object> x = new List<object>();
            x.Add(new MyTypeA());
            x.Add(new MyTypeB());
            foreach (var itemsOfA in x.Where(o => o.GetType().Name == "MyTypeA"))
            {
                Console.WriteLine("Found a " + itemsOfA.GetType());
            }
        }
    }

    class MyTypeA { }
    class MyTypeB { }
}