有没有办法通过使用类型名称转换字符串来在运行时指定类型?我跳下面的非编译代码可以解释我想要做什么。让我知道其他情况,并试图更好地解释它。
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));
有可能吗?
答案 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 { }
}