类型化基类引用其实际类型

mon*_*001 2 c# polymorphism casting

我有一个Class BaseFilter和一些BaseFilter类的Derived类.

1. List<base> list = getFilters();
2. foreach(Base filter in list){
3.     var filterType = filter.GetType();
4.     var filter1 = filter as filterType;
5.     //DO SOME DERIVED CLASS OPERATION
6. }
Run Code Online (Sandbox Code Playgroud)

我在代码行3遇到错误.挑战是filter可以是任何派生类类型.有没有办法将过滤器对象强制转换为它的实际派生类?

我收到以下错误:无法找到类型或命名空间名称'filterType'(您是否缺少using指令或程序集引用?)

应该采用哪种正确方法?

Jon*_*eet 6

有没有办法将过滤器对象强制转换为它的实际派生类?

不.您必须知道您在编译时尝试转换的类型.

如果您不知道该类型,您如何知道要执行哪项操作?如果对所有类型执行相同的操作,则该操作应该在基类中存在(可能以抽象形式).

基本上,目前您的请求不是很有用 - 但如果您能提供有关您实际尝试的更多详细信息,以及为什么您认为"强制转换为实际类型"是合适的,我们可能会能够帮到你更多.

某些情况下,您可能会发现使用dynamic会有所帮助 - 但我只会将其作为最后的手段,在更清洁的方法失败之后 - 我们无法在不知道您想要实现的目标的情况下就这些更清洁的方法提供建议.