Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- if (item is MyDerivedGenericClass<>) // Won't compile
- public interface MarkerA { } // Empty Interface
- public interface MarkerB { } // Empty Interface
- public interface MarkerC { } // Empty Interface
- public class BaseClass { }
- public class DerivedClassA : BaseClass { }
- public class DerivedClassB : BaseClass { }
- public class DerivedClassC : BaseClass { }
- public class DerivedSpecialClass : BaseClass { }
- public class DerivedSpecialA : DerivedSpecialClass { }
- public class DerivedSpecialB : DerivedSpecialClass { }
- public class DerivedSpecialC : DerivedSpecialClass { }
- public class DerivedSpecialGenericA<T> : DerivedSpecialClass, MarkerA { }
- public class DerivedSpecialGenericB<T> : DerivedSpecialClass, MarkerB { }
- public class DerivedSpecialGenericC<T> : DerivedSpecialClass, MarkerC { }
- public void ProcessClasses(List<BaseClass> list)
- {
- // Iterate through a list of mixed classes that all derive from BaseClass
- foreach (BaseClass item in list)
- {
- // Ideal approach, but doesn't compile:
- // Try to isolate select class types to do something interesting with
- if ((item is DerivedSpecialA) || (item is DerivedSpecialB) || (item is DerivedSpecialGenericB<>))
- {
- var specialItem = item as DerivedSpecialClass;
- DoSomethingInteresting(specialItem);
- Console.WriteLine(specialItem.Title);
- }
- // Alternative workaround that tests for the Marker instead
- // Try to isolate select class types to do something interesting with
- if ((item is DerivedSpecialA) || (item is DerivedSpecialB ) || (item is MarkerB))
- {
- var specialItem = item as DerivedSpecialClass;
- DoSomethingInteresting(specialItem);
- Console.WriteLine(specialItem.Title);
- }
- }
- }
- public class BaseClass
- {
- public abstract MarkerType { get; }
- }
- public enum MarkerType { A, B, C }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement