ParametrizedString.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using System.Text;
  4. namespace Quadarax.Foundation.Core.Value
  5. {
  6. /// <summary>
  7. /// Represents a string with parameters (bracked by defined tags) that can be replaced.
  8. /// Sample: Hello {name}, how are you?
  9. /// If name = John, the result will be: Hello John, how are you?
  10. /// </summary>
  11. public class ParameterizedString
  12. {
  13. private readonly string _parameterPrefix;
  14. private readonly string _parameterPostfix;
  15. private readonly string _initialString;
  16. private readonly IDictionary<string, string> _parameters;
  17. public string[] Parameters => _parameters.Keys.ToArray();
  18. /// <summary>
  19. /// Creates a new instance of the ParameterizedString class.
  20. /// </summary>
  21. /// <param name="initialString">Initial string with parameters thats bracked by <paramref name="parameterPrefix"/> and <paramref name="parameterPostfix"/> </param>
  22. /// <param name="parameterPrefix">Left parameter name bracket</param>
  23. /// <param name="parameterPostfix">Right parameter name bracket</param>
  24. public ParameterizedString(string initialString,string parameterPrefix = "", string parameterPostfix = "")
  25. {
  26. _parameterPostfix = parameterPostfix;
  27. _parameterPrefix = parameterPrefix;
  28. _initialString = initialString;
  29. _parameters = new Dictionary<string, string>();
  30. }
  31. /// <summary>
  32. /// Add new parameter with value.
  33. /// </summary>
  34. /// <param name="name">Parameter name.</param>
  35. /// <param name="value">Parameter value</param>
  36. /// <returns>If parameter already exists, returns false</returns>
  37. public bool AddParameter(string name, string value)
  38. {
  39. if(_parameters.ContainsKey(name))
  40. {
  41. return false;
  42. }
  43. _parameters.Add(name, value);
  44. return true;
  45. }
  46. /// <summary>
  47. /// Set existing parameter value.
  48. /// </summary>
  49. /// <param name="name">Parameter name.</param>
  50. /// <param name="value">Parameter value</param>
  51. /// <returns>If parameter not exists, returns false</returns>
  52. public bool SetParameter(string name, string value)
  53. {
  54. if(!_parameters.ContainsKey(name))
  55. {
  56. return false;
  57. }
  58. _parameters[name] = value;
  59. return true;
  60. }
  61. /// <summary>
  62. /// Add or Set existing parameter value.
  63. /// </summary>
  64. /// <param name="name">Parameter name.</param>
  65. /// <param name="value">Parameter value</param>
  66. public void AddOrSetParameter(string name, string value)
  67. {
  68. if(!SetParameter(name, value))
  69. AddParameter(name, value);
  70. }
  71. /// <summary>
  72. /// Renders the string with the parameters.
  73. /// </summary>
  74. /// <returns>Transalted string</returns>
  75. public override string ToString()
  76. {
  77. var sb = new StringBuilder(_initialString);
  78. foreach (var key in _parameters.Keys)
  79. {
  80. sb.Replace(_parameterPrefix + key + _parameterPostfix, _parameters[key]);
  81. }
  82. return sb.ToString();
  83. }
  84. }
  85. }