AbstractValue.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System;
  2. namespace Quadarax.Foundation.Core.QConsole.Value
  3. {
  4. public abstract class AbstractValue
  5. {
  6. private object? _value;
  7. /// <summary>
  8. /// Defines if value is set. Not null.
  9. /// </summary>
  10. public bool HasValue => _value != null;
  11. /// <summary>
  12. /// Returns underlying system value type.
  13. /// </summary>
  14. public Type ValueType { get; }
  15. public AbstractValue()
  16. {
  17. ValueType = typeof(object);
  18. Reset();
  19. }
  20. public AbstractValue(Type valueType, object value) : this(valueType)
  21. {
  22. _value = value;
  23. }
  24. protected AbstractValue(Type valueType)
  25. {
  26. ValueType = valueType ?? throw new ArgumentNullException(nameof(valueType));
  27. }
  28. protected abstract object ConvertStringToValue(string valueAsString);
  29. public abstract string AsString();
  30. public void Set(string valueAsString)
  31. {
  32. if (string.IsNullOrEmpty(valueAsString))
  33. {
  34. Reset();
  35. return;
  36. }
  37. Set(ConvertStringToValue(valueAsString));
  38. }
  39. public virtual void Set(object? value)
  40. {
  41. _value = value;
  42. }
  43. public object? Get()
  44. {
  45. return _value;
  46. }
  47. public void Reset()
  48. {
  49. _value = null;
  50. }
  51. public static AbstractValue Create(TypeValuesEnum typeValue)
  52. {
  53. switch (typeValue)
  54. {
  55. case TypeValuesEnum.Bool:
  56. return new BoolValue();
  57. case TypeValuesEnum.Date:
  58. return new DateValue();
  59. case TypeValuesEnum.DateTime:
  60. return new DateTimeValue();
  61. case TypeValuesEnum.Decimal:
  62. return new DecimalValue();
  63. case TypeValuesEnum.Guid:
  64. return new GuidValue();
  65. case TypeValuesEnum.Integer:
  66. return new IntegerValue();
  67. case TypeValuesEnum.String:
  68. return new StringValue();
  69. case TypeValuesEnum.Time:
  70. return new TimeValue();
  71. case TypeValuesEnum.TimeSpan:
  72. return new TimeSpanValue();
  73. default:
  74. throw new NotSupportedException($"Unsupported argument value '{typeValue}'");
  75. }
  76. }
  77. public override string ToString()
  78. {
  79. return AsString();
  80. }
  81. }
  82. }