Проверьте аргументы, разделите raw по строковому separator и преобразуйте каждый фрагмент через IPAddress.TryParse. Для первого некорректного адреса выбросьте FormatException.
Реализуйте интерфейс парсера IP-адресов: разделите строку raw по separator, верните IReadOnlyCollection<IPAddress>; при null выбросьте ArgumentNullException, при пустом separator — ArgumentException, при невалидном IP — FormatException.
Проверьте аргументы, разделите raw по строковому separator и преобразуйте каждый фрагмент через IPAddress.TryParse. Для первого некорректного адреса выбросьте FormatException.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Проверьте аргументы, разделите raw по строковому separator и преобразуйте каждый фрагмент через IPAddress.TryParse. Для первого некорректного адреса выбросьте FormatException.
Один из возможных контрактов и его реализация:
using System;
using System.Collections.Generic;
using System.Net;
public interface IIpParser
{
IReadOnlyCollection<IPAddress> Parse(string raw, string separator);
}
public sealed class IpParser : IIpParser
{
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 result = new List<IPAddress>();
foreach (var item in raw.Split(new[] { separator }, StringSplitOptions.None))
{
if (!IPAddress.TryParse(item.Trim(), out var address))
throw new FormatException("Invalid IP address");
result.Add(address);
}
return result.AsReadOnly();
}
}
Здесь пробелы вокруг адресов допускаются, дубликаты сохраняются, а пустая строка или пустой элемент считаются ошибкой формата. IPAddress.TryParse принимает и некоторые нестандартные сокращённые записи IPv4; если допустим только строгий dotted-decimal, потребуется дополнительная проверка.