diff --git a/CryptoExchange.Net/ExchangeHelpers.cs b/CryptoExchange.Net/ExchangeHelpers.cs index bb41dda..cb0925e 100644 --- a/CryptoExchange.Net/ExchangeHelpers.cs +++ b/CryptoExchange.Net/ExchangeHelpers.cs @@ -15,6 +15,7 @@ namespace CryptoExchange.Net public static class ExchangeHelpers { private const string _allowedRandomChars = "ABCDEFGHIJKLMONOPQRSTUVWXYZabcdefghijklmonopqrstuvwxyz0123456789"; + private const string _allowedRandomHexChars = "0123456789ABCDEF"; private static readonly Dictionary _monthSymbols = new Dictionary() { @@ -192,6 +193,24 @@ namespace CryptoExchange.Net return new string(randomChars); } + /// + /// Generate a random string of specified length + /// + /// Length of the random string + /// + public static string RandomHexString(int length) + { +#if NET9_0_OR_GREATER + return "0x" + RandomNumberGenerator.GetHexString(length * 2); +#else + var randomChars = new char[length * 2]; + var random = new Random(); + for (int i = 0; i < length * 2; i++) + randomChars[i] = _allowedRandomHexChars[random.Next(0, _allowedRandomHexChars.Length)]; + return "0x" + new string(randomChars); +#endif + } + /// /// Generate a long value /// diff --git a/CryptoExchange.Net/ExchangeSymbolCache.cs b/CryptoExchange.Net/ExchangeSymbolCache.cs index b6b5cd3..45ddc3a 100644 --- a/CryptoExchange.Net/ExchangeSymbolCache.cs +++ b/CryptoExchange.Net/ExchangeSymbolCache.cs @@ -38,8 +38,11 @@ namespace CryptoExchange.Net /// /// Id for the provided data /// Symbol name - public static SharedSymbol? ParseSymbol(string topicId, string symbolName) + public static SharedSymbol? ParseSymbol(string topicId, string? symbolName) { + if (symbolName == null) + return null; + if (!_symbolInfos.TryGetValue(topicId, out var exchangeInfo)) return null;