ArgumentException: часть строки версии была слишком короткой или слишком длинной - PullRequest
0 голосов
/ 05 ноября 2019

Я беру версии продукта из БД, которая хранится как VARCHAR и имеет значение, подобное этому 2.6.12-build.222. Мне нужно все обрезать после -, поэтому в результате 2.6.12 ниже приведен код, как я делаю эту строковую операцию и отлично работаю, я получаю урезанную версию, но мне нужно сравнить две версии для дальнейших операцийдля этого я использую Version класс, но как только я передаю свою подстроку в класс Version, она показывает мне эту ошибку -

ArgumentException: Version string portion was too short or too long.

Все мои версии находятся в 2.6.12 формате

var resourceGuids = httpResp.Select(xl => xl.guid).ToList();

var existingBuilds = _DBcontext.Deployedproducts.Where(xl => resourceGuids.Contains(xl.Guid.ToString())).ToList();

var x = existingBuilds.FirstOrDefault(o => o.Guid == item.guid);

Version v = new Version(x.ProductVersion.Substring(0, x.ProductVersion.LastIndexOf("-") + 1).Replace(@"-",""));

if (item.Item1.version < v)
{
    x.LatestMajorRelease = item.Item1.version.ToString();
}

1 Ответ

1 голос
/ 05 ноября 2019

Если у вас могут быть значения без тире, вы должны проверить это перед выполнением подстроки.

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...