2015-03-18 4 views
0

Если строка «abcd.vv», код должен удалить «.vv» и вернуть только «abcd». Я использую сильфон код, но он дает мне ошибку, какУдалить персонажей после появления "."

«Только присваивания, вызов, увеличение, уменьшение, ОЖИДАНИЕ и новым выражения объекта может быть использован в качестве заявления»

public string remChar(string LicID) 
{ 
    if (LicID.Contains(".")) 
     { 
     int index = LicID.IndexOf("."); 
     return LicID.Substring(0, index); 
     } 
    else LicID; 
} 
+9

'еще вернуться LicID;';) – Carsten

+2

Вы можете сделать это немного более просто с 'вернуть LicID.Split() Первый()'. ''. –

+1

@ CarstenKönig lol, любящий, как в настоящее время только комментарий отвечает на вопрос ... –

ответ

-3

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

string result = Path.GetFileNameWithoutExtension(licID); 
+1

'Почему бы просто не сделать это, потому что он не выражает намерения. Вы можете использовать этот метод, но поместите его в другой метод с хорошим именем, таким как 'RemoveCharactersAfterFirstPeriod'. Для записи я не сделал ни слова. –

+0

Согласен, не выражает намерения. Плохая практика. – BenjaminPaul

+0

Я имел в виду заменить его 6 строк кода на это утверждение 1. Мне действительно нужно написать всю функцию в моем ответе? – CoderForHire

2

причина ваш код не удается, потому что вам не хватает оператора возврата.

public string remChar(string LicID) 
{ 
    if (LicID.Contains(".")) 
     { 
     int index = LicID.IndexOf("."); 
     return LicID.Substring(0, index); 
     } 

    return LicID; 
} 

Нечто подобное может также работать и упрощает его немного ...

using System.Linq; 


public string removeChar(string LicID) 
{ 
    return (LicID ?? "").Split('.').First(); 
} 
+0

Получить нулевую проверку с помощью' return (LicID ??) ") .Split ('.'). First();' Кроме того, это был не вопрос. –

+0

Я получаю сообщение об ошибке «System.Array» не содержит определения для «First» и не используется метод расширения «First» может быть найден первый аргумент типа «System.Array» (вам не хватает директивы using или ссылки на сборку?) « – xyz

+0

@xyz' using System.Linq; ' –

2

Чтобы остановить обилие непонятных ответов, ваш текущий код имеет ошибку компилятора по той причине, Карстен указывает, , больше ничего. Помимо этого и нескольких защитных проверок, он работает.

будет скомпилирован, а также делать то, что вам это нужно (плюс немного больше проверки, без учета регистра, и удаление лишних заявлений):

public static string RemoveCharactersAfterFirstPeriod(string value) 
{ 
    if (!string.IsNullOrWhiteSpace(value) && value.Contains(".")) 
    { 
     int index = value.IndexOf(".", StringComparison.OrdinalIgnoreCase); 
     return value.Substring(0, index); 
    } 

    return value; 
} 

Или с Linq:

public static string RemoveCharactersAfterFirstPeriod(string value) 
{ 
    return (value ?? "").Split('.').First(); 
} 

Если он тестируется и отвечает вашим требованиям, а его изменение для одной линии - перспектива с нулевой стоимостью. Мое единственное изменение было бы переименовать метод в стандарты именования C#.

+1

ребята - почему бы кто-нибудь забросить единственный осмысленный ответ во всем этом беспорядке? – Carsten

+2

Какое значение это привело к моему ответу? – BenjaminPaul

+1

@BenjaminPaul Это указывает на то, что единственная неправильная вещь в вопросе - ошибка компилятора, о которой ваш ответ не упоминался вначале (смотря на историю изменений). Он также фиксирует желание переписать что-то, что работает. Я указываю стандарты именования и ценность единицы, проверяющей ваши требования. –

-1

Использование Regex.

public static string ExtractString(string text) 
{ 
    if (text == null) 
     throw new ArgumentNullException("text"); 

    return Regex.Match(text, @"^[^\.]*").Groups[0].Value; 
} 
-1
Regex.Match("input.foo", @"([^\.]*)\.?.*").Groups[1].ToString() 

Возвращает входные

Regex.Match(".foo", @"([^\.]*)\.?.*").Groups[1].ToString() 

возвращает пустую строку

Regex.Match("input", @"([^\.]*)\.?.*").Groups[1].ToString() 

возвращает вход

Regex.Match("", @"([^\.]*)\.?.*").Groups[1].ToString() 

возвращает пустую строку

Regex.Match("input.foo.bar", @"([^\.]*)\.?.*").Groups[1].ToString() 

возвращает вход

Смежные вопросы