Advertisement
Guest User

Untitled

a guest
Aug 30th, 2016
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. List<Base> list = new List<Base>() { new DerivedA() { A = "A" }, new DerivedB() { B = "B" }};
  6.  
  7. List<Flat> flatList = list.Select(x => Factory.GetFlat(x)).ToList(); // not working
  8. List<Flat> switchFlatList = list.Select(x => Factory.GetFlatSwitch(x)).ToList(); // works, but casting each element
  9. }
  10.  
  11. static class Factory
  12. {
  13. public static Flat GetFlat(Base baseObj)
  14. {
  15. return new Flat();
  16. }
  17.  
  18. public static Flat GetFlat(DerivedA a)
  19. {
  20. return new Flat() { A = a.A };
  21. }
  22.  
  23. public static Flat GetFlat(DerivedB b)
  24. {
  25. return new Flat() { B = b.B };
  26. }
  27.  
  28. public static Flat GetFlatSwitch(Base baseObj)
  29. {
  30. switch (baseObj.MyType)
  31. {
  32. case MyTypeEnum.A:
  33. DerivedA a = baseObj as DerivedA;
  34. return new Flat() { A = a.A };
  35. case MyTypeEnum.B:
  36. DerivedB b = baseObj as DerivedB;
  37. return new Flat() { B = b.B };
  38. default:
  39. return new Flat();
  40. }
  41. }
  42. }
  43.  
  44. enum MyTypeEnum
  45. {
  46. A, B
  47. }
  48.  
  49. abstract class Base
  50. {
  51. public abstract MyTypeEnum MyType { get; }
  52. }
  53.  
  54. class DerivedA : Base
  55. {
  56. public override MyTypeEnum MyType
  57. {
  58. get
  59. {
  60. return MyTypeEnum.A;
  61. }
  62. }
  63. public string A { get; set; }
  64. }
  65.  
  66. class DerivedB : Base
  67. {
  68. public override MyTypeEnum MyType
  69. {
  70. get
  71. {
  72. return MyTypeEnum.B;
  73. }
  74. }
  75. public string B { get; set; }
  76. }
  77.  
  78. class Flat
  79. {
  80. public string A { get; set; }
  81.  
  82. public string B { get; set; }
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement