如何将 System.Type 的列表传递给方法?
How to pass in a list of System.Type into a method?
我正在尝试将 System.Type
的列表传递给方法。不是 个实例 ,而是 Type
个实例。
现在有一个问题:我希望通过接口限制 Type
。
例如,假设我有这个...
public interface IFoo
public class Cat : IFoo
public class Dog : IFoo
然后这个..
public void MyMethod(IEnumerable<Type> foos)
但只允许 Cat
和 Dog
而不允许其他任何内容。
通常,我这样做:public void MyMethod(IEnumberable<IFoo> foos)
但这是在请求一些 foo 实例 ,这不是我想要做的。
我假设您的方法只需要一个实现 IFoo
的实例(对象)列表。如果是,则使用 IEnumerable<IFoo>
;如:
public void MyMethod(IEnumerable<IFoo> foos) { ... }
更新
无法声明该方法只接受实现 interface
的 Type
列表。您需要在自己的代码中进行验证。
if (!foos.Any(t => t.GetInterfaces().Contains(typeof(IFoo)))
throw new ArgumentException(...);
public void MyMethod<T>(T theType) where T : List<Cat>, List<Dog>
public static void MyMethod<T>(Type theType) where T : ICat {}
ICat icat = new Class2();
//This will not work because its the wrong type
IDog idog = new Class2();
MyMethod<ICat>(icat.GetType());
我正在尝试将 System.Type
的列表传递给方法。不是 个实例 ,而是 Type
个实例。
现在有一个问题:我希望通过接口限制 Type
。
例如,假设我有这个...
public interface IFoo
public class Cat : IFoo
public class Dog : IFoo
然后这个..
public void MyMethod(IEnumerable<Type> foos)
但只允许 Cat
和 Dog
而不允许其他任何内容。
通常,我这样做:public void MyMethod(IEnumberable<IFoo> foos)
但这是在请求一些 foo 实例 ,这不是我想要做的。
我假设您的方法只需要一个实现 IFoo
的实例(对象)列表。如果是,则使用 IEnumerable<IFoo>
;如:
public void MyMethod(IEnumerable<IFoo> foos) { ... }
更新
无法声明该方法只接受实现 interface
的 Type
列表。您需要在自己的代码中进行验证。
if (!foos.Any(t => t.GetInterfaces().Contains(typeof(IFoo)))
throw new ArgumentException(...);
public void MyMethod<T>(T theType) where T : List<Cat>, List<Dog>
public static void MyMethod<T>(Type theType) where T : ICat {}
ICat icat = new Class2();
//This will not work because its the wrong type
IDog idog = new Class2();
MyMethod<ICat>(icat.GetType());