Если у вас могут быть значения без тире, вы должны проверить это перед выполнением подстроки.
string version = x.ProductVersion;
int dashIndex = x.ProductVersion.IndexOf("-");
if(dashIndex > -1)
version = version.Substring(0, dashIndex);
Version v = new Version(version);
Примечание. Я использовал IndexOf
на всякий случай, если позже будет второй тире.
Вы также можете выполнить другие проверки, например, если dashIndex
равно 0, тогда это приведет к пустой строке, поскольку, скорее всего, это неверная версия для начала.
Фактически, если dashIndex
меньше 3тогда она не может быть действительной версией (поскольку для версии требуется как минимум 2 части, такие как 1.1 или 2.3).