在 运行时 期间,我想使用扩展了我的基类的类填充下拉列表。目前我有一个枚举,这是我用来填充该列表,但我想添加其他类(和其他人正在添加类),并且不希望为此目的维护枚举。我想添加一个新类并且神奇地(可能反射)该类出现在列表中,而没有为下拉列表添加任何附加代码,或者添加任何其他枚举。
class Animal { ... }
enum AllAnimals { Cat, Dog, Pig };
class Cat : Animal {...}
class Dog : Animal {...}
class Pig : Animal {...}
有没有办法实现这个目标?
答案 0 :(得分:1)
使用反射来获取已加载的程序集,然后枚举所有作为基类的子类的类型。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var types = new List<Type>();
foreach (var assembly in assemblies)
types.AddRange(assembly.GetTypes().Where(x => x.IsSubclassOf(typeof(Animal))));
foreach (var item in types)
Console.WriteLine(item.Name);
}
}
class Animal { }
enum AllAnimals { Cat, Dog, Pig };
class Cat : Animal { }
class Dog : Animal { }
class Pig : Animal { }
}