рдиреНрдпреВрдирддрдо: рдЯреБрдХрдбрд╝реЛрдВ рдХреА рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЧреЛрдВрдж

рд╕рдВрднрд╡рддрдГ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬреЛ рдЕрдХреНрд╕рд░ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЕрдЧрд▓реА рд╕реНрдерд┐рддрд┐ рдкреВрд░реА рд╣реЛрдиреЗ рдкрд░ рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЬреЛрдбрд╝реЗрдВред

рдХреЛрдб рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреБрдХрдбрд╝рд╛ (рдереЛрдбрд╝рд╛ рдЖрдХрд╕реНрдорд┐рдХ рдЙрджрд╛рд╣рд░рдг, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА):
void SomeFunc(string arg1, string arg2, string arg3) { string msg = ""; if (arg1 == null) msg += "ARG1 "; if (arg2 == null) msg += "ARG2 "; if (arg3 == null) msg += "ARG3 "; if (msg != "") throw new ArgumentNullException(msg); //... } 

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдпрджрд┐ рд╕рднреА рддрд░реНрдХ рд╢реВрдиреНрдп рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ "ARG1 ARG2 ARG3" рдорд┐рд▓рддрд╛ рд╣реИ ред
рдФрд░ рдЕрдЧрд░ рд╣рдо "ARG1 , ARG2 , ARG3" рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ "рдПрдЖрд░рдЬреА 1 , рдПрдЖрд░рдЬреА 2 рдФрд░ рдПрдЖрд░рдЬреА 3" ?

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╣реБрдд рдмрд╛рд░ (рдпрджрд┐ рдЖрдк рдЕрдВрддрд┐рдо рд╢рдмреНрдж рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ), рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
 void SomeFunc(string arg1, string arg2, string arg3) { string msg = ""; if (arg1 == null) msg += "ARG1, "; if (arg2 == null) msg += "ARG2, "; if (arg3 == null) msg += "ARG3, "; if (msg.EndsWith(", ")) msg = msg.Substring(0, msg.Length - 2); if (msg != "") throw new ArgumentNullException(msg); //... } 
рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рд╡реЗ рдкреНрд░рддреНрдпреЗрдХ рд╢рдмреНрдж рдХреЗ рдмрд╛рдж рдПрдХ рд╡рд┐рднрд╛рдЬрдХ рд▓рдЧрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрдВрдХреНрддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рднрд╛рдЬрдХ рдХреЛ "рдХрд╛рдЯрддреЗ рд╣реИрдВ"ред

рдЕрднреА рднреА рдЙрд╕реА рддрд░реАрдХреЗ рдХреА рдереЛрдбрд╝реА рднрд┐рдиреНрдирддрд╛ рд╣реИ, рдЬрдм рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ "рдЕрддрд┐рд░рд┐рдХреНрдд" рддрд░реНрдХ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрдм рд╡рд┐рднрд╛рдЬрдХ рдХреЛ рдЕрдЧрд▓рд╛ рдЯреБрдХрдбрд╝рд╛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдЖрдкрдХреЛ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд╛рдЯрдирд╛ рд╣реИред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 string BuildSQL(string arg1, string arg2, string arg3) { string sql = "SELECT * FROM table_1 WHERE 1=1 "; if (arg1 != null) sql += "AND ARG1 = ? "; if (arg2 != null) sql += "AND ARG1 = ? "; if (arg3 != null) sql += "AND ARG1 = ? "; return sql; } 
рд╢рд░реНрддреЛрдВ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрдпреЛрдЬрдиреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдкрд░ рдореИрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

рдФрд░ рдЕрдм, рдореИрдВ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХрд┐рд╕ рдмреИрд╕рд╛рдЦреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ:

1) рд╡рд┐рд╕реНрддрд╛рд░

рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╕рднреА рд╕реАрдорд╛рдВрдХрдХ рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕реНрдЯрд╛рд░реНрдЯ рд▓рд╛рдЗрди рдЦрд╛рд▓реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛:
 public static class StringEx { public static string Append(this string main, string str, string delimiter) { if (string.IsNullOrEmpty(str) || string.IsNullOrEmpty(delimiter)) return main; else if (string.IsNullOrEmpty(main) || main.Trim() == "" || str.Trim() == "" || delimiter.Trim() == "") return str; else return main + delimiter + str; } } 


2) рд╣реЗрд▓реНрдкрд░ рдХреНрд▓рд╛рд╕

рдЕрдВрддрд┐рдо рдЯреБрдХрдбрд╝реЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╕реНрддрд╛рд░ рдЕрдм рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЖрдкрдХреЛ рдПрдХ рд╕рд╣рд╛рдпрдХ рд╡рд░реНрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
 class ListBuilder { bool first = true; string last = ""; string content = ""; string delimiter = ", "; string lastdelimiter = " and "; public ListBuilder() { } public ListBuilder(string delimiter, string lastdelimiter) { this.delimiter = delimiter ?? ", "; this.lastdelimiter = lastdelimiter ?? " and "; } public ListBuilder(string content, string delimiter, string lastdelimiter) { this.content = content ?? ""; this.delimiter = delimiter ?? ", "; this.lastdelimiter = lastdelimiter ?? " and "; } public void Append(string str) { if (str == null || str.Trim() == "") return; //  if (first) { content += str; first = false; } //  else { if (last != "") content += delimiter + last; last = str; } } public override string ToString() { if (last != "") return content + lastdelimiter + last; else return content; } } 

рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг:

 ListBuilder lb = new ListBuilder("  ", ", ", "  "); foreach (string s in new string[] { "", "", "", "" }) lb.Append(s); //  Console.WriteLine(lb + "!"); 

рдФрд░ рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг:

 ListBuilder lb = new ListBuilder(",  ,   ", ", ", "   "); if (!IsAutorized()) lb.Append("  "); if (!IsAdmin()) lb.Append("  "); if (!IsBadDay()) lb.Append("  "); if (!IsAutorized() || !IsAdmin() || !IsBadDay()) Console.WriteLine(lb + "."); 

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрд╛ рдХрдо рд╕реЗ рдХрдо рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП)ред

ps рд╣рд╛рдБ, рдореИрдВ StringBuilder рдФрд░ IsNullOrWhiteSpace рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реВрдВред рд▓реЗрдХрд┐рди рдореБрдЭреЗ StringBuilder рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдФрд░ IsNullOrWhiteSpace рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ 4 рд╡реЗрдВ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдФрд░ рдмреИрд╕рд╛рдЦреА рдЦреБрдж 3.5 рдХреЗ рд▓рд┐рдП рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

Source: https://habr.com/ru/post/In133805/


All Articles