2015-07-31 3 views
-8

У меня есть переменная, которая содержит сообщения об исключениях. Как проверить, является ли текст сообщения об исключении, например:Как проверить, содержит ли строка две другие строки

var ex.message = "Cannot open server 'abcd' requested by the login"; 

Помните, что имя сервера может быть любой длины?

+1

Определить * что-то вроде этого *. Вы имеете в виду, что текст является тем же самым, кроме части '' abcd''? Каковы были бы другие строки-кандидаты, которые должны были выглядеть неудачно? Кто-нибудь из других начинает с '' Can not open server ''? Посмотрите на класс «String» в MSDN, существует множество методов, которые вы можете использовать: «Содержит», «StartsWith», «IndexOf», или вы можете использовать регулярное выражение, например: «Невозможно открыть сервер» (. *) «запрашивается логином», который позволяет вам также захватить имя раздела. –

+1

Как кто-то, кто задал почти 1000 вопросов на SO, я ожидал бы, что вы уже знаете, что такая запись будет сильно опущена. – DavidG

+4

Его лучше определить из типа исключения, а не из сообщения об исключении. –

ответ

1
ex.message.Contains("Cannot open server") && ex.message.Contains("requested by the login") 
1
ex.message.StartsWith("Cannot open server") && ex.message.EndsWith("requested by the login") 

Вы также можете проверить, что происходит в середине, если вы уже знаете имя сервера.

Почему бы не сделать это лучше и не определить собственное исключение. например ServerConnectionFailedException

2

Вы могли бы сделать это с помощью регулярного выражения

var isMatch = Regex.IsMatch(exceptionMessage, "Cannot open server '[^']+' requested by the login"); 
3

Вы не должны использовать сообщение исключения, чтобы определить, что пошло не так. Вместо этого поймайте соответствующий тип исключения и обработайте его там. Например, вы, вероятно, wnat использовать SqlException:

try 
{ 
    ConnectToDatabase(); 
} 
catch(SqlException ex) 
{ 
    //Now we know a SQL exception has occurred, perhaps check the Number property? 
    if(ex.Number == 18456) 
    { 
     //Login failed 
    } 
} 
catch(Exception ex) 
{ 
    //General exception handling goes here 
} 
+0

Большое спасибо David. Я не знал, что у exeption даже был номер – Alan2

+0

@Alan 'Exception', но это не SqlException'. – DavidG

1

Битовая экзотическое решение (с помощью методов extesnion):

public static class Strings { 
    public static Boolean ContainsAll(this String source, params String[] toFind) { 
     if (null == toFind) 
     return true; // or throw an exception 
     else if (toFind.Length <= 0) 
     return true; 

     if (String.IsNullOrEmpty(source)) 
     return false; 

     foreach (var item in toFind) 
     if (!source.Contains(item)) 
      return false; 

     return true; 
    } 
    } 

    ... 

    var ex.message = "Cannot open server 'abcd' requested by the login"; 

    if (ex.message.ContainsAll("Cannot open server", "requested by the login")) { 
    ... 
    } 
Смежные вопросы