[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
У C# ви можете використовувати метод TryParse для розбору рядка в параметр загального типу. Однак, оскільки TryParse є статичним методом вбудованих типів, таких як int, double тощо, його не можна використовувати безпосередньо з параметрами загальних типів.
Одне з рішень – використовувати обмеження типу, щоб переконатися, що параметр загального типу T є посилальним типом і реалізує інтерфейс IConvertible.
Інтерфейс IConvertible визначає методи перетворення значення в різні поширені типи, включаючи рядок, і назад. Потім ви можете використовувати метод Convert.ChangeType() для перетворення розібраного значення до типу T.
Ось приклад реалізації загального методу TryParse, що використовує ці прийоми:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System; public static class GenericParser { public static bool TryParse<T>(string s, out T result) where T : class, IConvertible { result = null; try { object parsedValue = Convert.ChangeType(s, typeof(T)); result = (T)parsedValue; return true; } catch (Exception) { return false; } } } |
У цьому прикладі метод TryParse приймає рядок s і вихідний параметр result типу T. Обмеження where T : class, IConvertible гарантує, що T є посилальним типом і реалізує інтерфейс IConvertible.
Усередині методу використовується метод Convert.ChangeType для перетворення розібраного значення до типу T. Якщо перетворення пройшло успішно, розібране значення присвоюється параметру result, і метод повертає true. В іншому випадку метод повертає false.
Ось приклад використання методу GenericParser.TryParse для розбору рядка в параметр універсального типу:
1 2 3 4 5 6 7 8 9 |
string s = "123"; if (GenericParser.TryParse<int>(s, out int result)) { Console.WriteLine($"Parsed value: {result}"); } else { Console.WriteLine("Failed to parse"); } |