Я занимаюсь рефакторингом своего кода и хотел использовать метод IPAddress.TryParse
, чтобы проверить, является ли строка допустимым адресом IPv4 вместо использования регулярных выражений:
public static bool IsIPv4(string value)
{
IPAddress address;
if (IPAddress.TryParse(value, out address))
{
if (address.AddressFamily == AddressFamily.InterNetwork)
{
return true;
}
}
return false;
}
Мой модульный тест теперь происходит сбой, поскольку эти входные значения возвращают true
и анализируются на следующие объекты IPAddress
:
value = "0.0.0.0" -> address = {0.0.0.0}
value = "255.255.255" -> address = {255.255.0.255}
value = "65536" -> address = {0.1.0.0}
Имеет ли это смысл? Я вижу, что 0.0.0.0
технически является допустимым IPv4-адресом, даже если для пользователя нет смысла вводить его. А что насчет двух других? Почему они конвертируются так, как есть, и должен ли я рассматривать их как действительные, даже если это может быть непрозрачно для пользователя, который, возможно, просто забыл ввести точки ( 65536
вместо 6.5. 5.36
).
Любая помощь приветствуется.