Метод должен проверить null и пустой разделитель, разобрать каждый фрагмент как IP-адрес и вернуть коллекцию. Первый недопустимый адрес приводит к FormatException.
/// <summary>
Метод должен проверить null и пустой разделитель, разобрать каждый фрагмент как IP-адрес и вернуть коллекцию. Первый недопустимый адрес приводит к FormatException.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
/// /// Возвращает разобранный список IP-адресов /// /// сырой список IP-адресов /// разделитель IP-адресов /// Список IP-адресов /// Выбрасывается, когда raw или separator равны null /// Выбрасывается, когда separator — пустая строка /// Выбрасывается, когда IP-адрес недопустим IReadOnlyCollection<IPAddress> Parse(string raw, string separator);
Ответ
Метод должен проверить null и пустой разделитель, разобрать каждый фрагмент как IP-адрес и вернуть коллекцию. Первый недопустимый адрес приводит к FormatException.
Реализация метода внутри класса:
public IReadOnlyCollection<IPAddress> Parse(string raw, string separator)
{
if (raw == null) throw new ArgumentNullException(nameof(raw));
if (separator == null) throw new ArgumentNullException(nameof(separator));
if (separator.Length == 0)
throw new ArgumentException("Empty separator", nameof(separator));
var addresses = new List<IPAddress>();
foreach (var part in raw.Split(new[] { separator }, StringSplitOptions.None))
{
if (!IPAddress.TryParse(part.Trim(), out var address))
throw new FormatException("Invalid IP address");
addresses.Add(address);
}
return addresses.AsReadOnly();
}
Нужны System, System.Collections.Generic и System.Net. Здесь пустые элементы не пропускаются, пробелы по краям убираются, порядок и дубликаты сохраняются. Если контракт требует иного поведения для пустого raw или строгого IPv4-формата, это следует явно уточнить; TryParse не проверяет доступность адреса.