fork download
  1. using System;
  2. using System.Collections.Generic;
  3.  
  4. public class Program
  5. {
  6. public class MyData : IEquatable<MyData>, IComparable<MyData>
  7. {
  8. public static implicit operator MyData(string s) { var data = new MyData(); /* TODO */ return data; }
  9. public static implicit operator MyData(DateTime dt) { var data = new MyData(); /* TODO */ return data; }
  10. public static implicit operator MyData(int dt) { var data = new MyData(); /* TODO */ return data; }
  11.  
  12. // implement IComparable<MyData> members...
  13. // implement IEquatable<MyData> members...
  14.  
  15. // override object.Equals()
  16. // override object.GetHashCode()
  17. public static bool operator <(MyData a, MyData b) { return Comparer<MyData>.Default.Compare(a,b) == -1; }
  18. public static bool operator >(MyData a, MyData b) { return Comparer<MyData>.Default.Compare(a,b) == +1; }
  19.  
  20. // e.g.:
  21. // the desired default representation for comparisons, e.g. string?
  22. // use 'dynamic' on C# 4.0 and beyond
  23. private object/*dynamic*/ variant_data;
  24.  
  25. public int CompareTo(MyData other)
  26. {
  27. // TODO implement your own logic
  28. return GetHashCode().CompareTo(null != other ? other.GetHashCode() : 0);
  29. }
  30.  
  31. // TODO implement your own equality logic:
  32. public bool Equals(MyData other)
  33. {
  34. if (ReferenceEquals(null, other)) return false;
  35. if (ReferenceEquals(this, other)) return true;
  36. return Equals(other.variant_data, variant_data);
  37. }
  38.  
  39. public override bool Equals(object obj)
  40. {
  41. if (ReferenceEquals(null, obj)) return false;
  42. if (ReferenceEquals(this, obj)) return true;
  43. if (obj.GetType() != typeof (MyData)) return false;
  44. return Equals((MyData) obj);
  45. }
  46.  
  47. public override int GetHashCode() { return (variant_data != null ? variant_data.GetHashCode() : 0); }
  48. public static bool operator ==(MyData left, MyData right) { return Equals(left, right); }
  49. public static bool operator !=(MyData left, MyData right) { return !Equals(left, right); }
  50. }
  51.  
  52. public static void Main(string[] args)
  53. {
  54. var cmp = Comparer<MyData>.Default;
  55.  
  56. string s = "123";
  57. int i = 234;
  58. DateTime dt = DateTime.Now;
  59.  
  60. if (-1 == cmp.Compare(s, i)) Console.WriteLine("s < i");
  61. if (+1 == cmp.Compare(dt, i)) Console.WriteLine("dt > i");
  62.  
  63. // or even:
  64. if ((MyData) s > i) Console.WriteLine("s > i");
  65. if ((MyData) dt< i) Console.WriteLine("dt < i");
  66. }
  67. }
  68.  
Success #stdin #stdout 0.01s 37920KB
stdin
Standard input is empty
stdout
Standard output is empty