Advertisement
Guest User

Untitled

a guest
Jul 26th, 2014
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.97 KB | None | 0 0
  1. if (item is MyDerivedGenericClass<>) // Won't compile
  2.  
  3. public interface MarkerA { } // Empty Interface
  4. public interface MarkerB { } // Empty Interface
  5. public interface MarkerC { } // Empty Interface
  6.  
  7. public class BaseClass { }
  8.  
  9. public class DerivedClassA : BaseClass { }
  10. public class DerivedClassB : BaseClass { }
  11. public class DerivedClassC : BaseClass { }
  12.  
  13. public class DerivedSpecialClass : BaseClass { }
  14.  
  15. public class DerivedSpecialA : DerivedSpecialClass { }
  16. public class DerivedSpecialB : DerivedSpecialClass { }
  17. public class DerivedSpecialC : DerivedSpecialClass { }
  18.  
  19. public class DerivedSpecialGenericA<T> : DerivedSpecialClass, MarkerA { }
  20. public class DerivedSpecialGenericB<T> : DerivedSpecialClass, MarkerB { }
  21. public class DerivedSpecialGenericC<T> : DerivedSpecialClass, MarkerC { }
  22.  
  23.  
  24. public void ProcessClasses(List<BaseClass> list)
  25. {
  26. // Iterate through a list of mixed classes that all derive from BaseClass
  27. foreach (BaseClass item in list)
  28. {
  29.  
  30. // Ideal approach, but doesn't compile:
  31.  
  32. // Try to isolate select class types to do something interesting with
  33. if ((item is DerivedSpecialA) || (item is DerivedSpecialB) || (item is DerivedSpecialGenericB<>))
  34. {
  35. var specialItem = item as DerivedSpecialClass;
  36.  
  37. DoSomethingInteresting(specialItem);
  38.  
  39. Console.WriteLine(specialItem.Title);
  40. }
  41.  
  42.  
  43. // Alternative workaround that tests for the Marker instead
  44.  
  45. // Try to isolate select class types to do something interesting with
  46. if ((item is DerivedSpecialA) || (item is DerivedSpecialB ) || (item is MarkerB))
  47. {
  48. var specialItem = item as DerivedSpecialClass;
  49.  
  50. DoSomethingInteresting(specialItem);
  51.  
  52. Console.WriteLine(specialItem.Title);
  53. }
  54. }
  55. }
  56.  
  57. public class BaseClass
  58. {
  59. public abstract MarkerType { get; }
  60. }
  61.  
  62. public enum MarkerType { A, B, C }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement