ReSharper: NullReferenceException рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз

рдпрджрд┐ рдЖрдк ReSharper рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХреЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ "рд╕рдВрднрд╛рд╡рд┐рдд 'NullReferenceException' рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред " рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдЙрд╕ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддрд╛ рд╣реИред



рддреБрд░рдВрдд рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:



public string Bar( bool condition)

{

string iAmNullSometimes = condition ? "Not null value" : null ;

return iAmNullSometimes.ToUpper();

}




* This source code was highlighted with Source Code Highlighter .






ReSharper рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд┐ рдХреА рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдореЗрдВ iAmNullSometimes рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдм рд╡рд┐рдзрд┐ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:



public string Bar( bool condition)

{

string iAmNullSometimes = GetNullWhenFalse(condition);

return iAmNullSometimes.ToUpper();

}



public string GetNullWhenFalse( bool condition)

{

return condition ? "Not null value" : null ;

}




* This source code was highlighted with Source Code Highlighter .






рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдмрд╛рдж, рдЪреЗрддрд╛рд╡рдиреА рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ?





рд╡рд┐рд╢реНрд▓реЗрд╖рдХ



рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рдкрд╣рдЪрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдЪрд░ рдХреЗ рдХреНрдпрд╛ рдореВрд▓реНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдПрдХ рдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдореВрд░реНрдд рдЬреНрдЮрд╛рди рдХрд╛ рд╕реНрддрд░ рдХрд┐рд╕ рд╕реНрддрд░ рдкрд░ рдШрдЯрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдЪрд░ рдореЗрдВ рдПрдХ рдпрд╛ рдХрдИ рд░рд╛рдЬреНрдп рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:



* NULL , NOT_NULL - рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд▓рд┐рдВрдХ рдореЗрдВ рдПрдХ рд╢реВрдиреНрдп рдпрд╛ рдЧреИрд░-рд╢реВрдиреНрдп рдорд╛рди рд╣реИ;

* рд╕рд╣реА , FALSE - рдЗрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдмреВрд▓ рдХреЗ рд▓рд┐рдП ;

* UNKNOWN - рдЖрд╢рд╛рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рджрд░реНрдЬ рдореВрд▓реНрдп, рдЬрд┐рд╕рдХреА рдорджрдж рд╕реЗ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрдо рд╣реЛ рдЬрд╛рддреА рд╣реИред



рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЪрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП, рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдкрд╣рд▓реА рд╕реВрдЪреА рдореЗрдВ, рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЗ рдмрд╛рдж iAmNullSometimes рдХреЗ рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░рд╛рдЬреНрдп рд╣реЛрдВрдЧреЗ: NULL рдФрд░ NOT_NULL ред рдЗрд╕рд▓рд┐рдП, "рд╕рдВрднрд╛рд╡рд┐рдд NullReferenceException" рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рд╣рдореЗрдВ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдирд┐рд╖реНрдкрд╛рджрди рдкрде рд╣реИ рдЬрд┐рд╕рдореЗрдВ iAmNullSometimes рд╢реВрдиреНрдп рд╣реЛрдЧрд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЬрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд┐рддрд┐ рдЭреВрдареА рд╣реИ)ред



рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ GetNullWhenFalse рдХрд┐рди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдЖрдк рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЙрди рддрд░реАрдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде рдЬреЛ рдХреБрдЫ рднреА рдХрд╛рд░рдг рдмрдирддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдЖрдзреБрдирд┐рдХ рдкреАрд╕реА рдкрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдордХреНрдЦреА рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рд░реАрд╢рд░ рд╕рдВрднрд╡ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдХреЛ рд╕реЗрдЯ рдХрд░ рд╕рдХреЗрдВ)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╡рд┐рдзрд┐ рд╕рдорд╛рдкреНрдд рд╣реЛ рд╕рдХрддреА рд╣реИред рд╣рдо рдордХреНрдЦреА рдкрд░ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдШрдЯрд┐рдд рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред



рдПрдХ рдФрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЬрд┐рди рдмрд╛рд╣рд░реА рддрд░реАрдХреЛрдВ рд╕реЗ рдХреБрдЫ рднреА рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ, рд╡реЗ NULL рдпрд╛ NOT_NULL рд╣реИрдВ ред рдпрд╣ рдХреИрд╕реЗ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред



ReSharper рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЖрд╢рд╛рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдпрджрд┐ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╡рд┐рд╢реЗрд╖ рд░рд╛рдЬреНрдп UNKNOWN рдореЗрдВ рд╣реЛрдЧрд╛ ред рдПрдХ рдЪрд░ рдЬреЛ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рдЬрдм рддрдХ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрдм рддрдХ рдЗрд╕реЗ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрдм рддрдХ рдХрд┐, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдРрд╕реЗ рдЕрдиреНрдп рдорд╛рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ, рдЬрд┐рди рдкрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдпрд╛ рдХреИрдирдмреЗрд▓ рд╡рд┐рдзрд┐ рд╕реЗ рд╢реВрдиреНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рджреВрд╕рд░реА рд╕реВрдЪреА рдореЗрдВ, рдпрд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ "рд╕рддрд░реНрдХрддрд╛ рдЦреЛрдирд╛" рдмрдирд╛рддрд╛ рд╣реИред



рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдЙрд╕рдХреЗ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рдореЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рдЧ рд╕реЗ рд▓рд┐рдЦреВрдВрдЧрд╛ред



рдЖрд╢рд╛рд╡рд╛рджреА рдФрд░ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рдЕрднреА рднреА рдХрд┐рд╕реА рддрд░рд╣ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рддрдерд╛рдХрдерд┐рдд рд╡рд┐рдзрд┐ рдХреНрдпрд╛ рд╕рдХреНрд╖рдо рд╣реИ, рддрд╛рдХрд┐ рд░реЗрд╕реНрдкрд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдорд┐рд▓реЗрдВред рдпрд╣рд╛рдВ рд╣рдо рдЕрдиреБрдмрдВрдзреЛрдВ рдХреА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред



рдареЗрдХреЗ



ReSharper рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ "рдПрдХ рд╡рд┐рдзрд┐ рдХрднреА рднреА рдЕрд╢рдХреНрдд рдирд╣реАрдВ", "рдПрдХ рд╡рд┐рдзрд┐ рдЕрд╢рдХреНрдд рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддреА рд╣реИ", "рдЖрдк рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдЕрд╢рдХреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред рд╕рд░рд▓рддрдо рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпреЗ рдЕрдиреБрдмрдВрдз JetBrains.Annotations.CanBeNullAttribute рдФрд░ JetBrains.Annotations.NotNullAttribute рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдПрдХ рд╡рд┐рдзрд┐ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП - рд╢реВрдиреНрдп рдорд╛рди рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдкрд░ред рдЙрдиреНрд╣реЗрдВ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдФрд░ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпреЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ JetBrains.Annotations.dll рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИрдВ, рдЬреЛ <ReSharper install directory> Bin рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИ ред



CanBeNull рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде GetNullWhenFalse рд╡рд┐рдзрд┐ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдХреЗ рджреВрд╕рд░реА рд╕реВрдЪреА рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:



public string Bar( bool condition)

{

string iAmNullSometimes = GetNullWhenFalse(condition);

return iAmNullSometimes.ToUpper();

}



[CanBeNull]

public string GetNullWhenFalse( bool condition)

{

return condition ? "Not null value" : null ;

}




* This source code was highlighted with Source Code Highlighter .






IAmNullSometimes рдЪрд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "рд╕рдВрднрд╛рд╡рд┐рдд 'NullReferenceException" рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред



рдпрджрд┐ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЦреАрдВрдЪрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреА рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕реАрдзреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд┐рд╕реА рднреА рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдпрджрд┐ рдХреЗрд╡рд▓ рдЙрдирдХреЗ рдирд╛рдо JetBrains.Annotations.dll рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред ReSharper рдХреА рд╕реЗрдЯрд┐рдВрдЧ рдкреГрд╖реНрдареЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╕реНрдерд┐рдд рдХреНрд▓рд┐рдкрдмреЛрд░реНрдб рдмрдЯрди рдкрд░ рдХреЙрдкреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ:







рдмрд╛рд╣рд░реА рдПрдиреЛрдЯреЗрд╢рди



рдпрджрд┐ рдЖрдк рдПрдХ рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп (рдЬреИрд╕реЗред Mscorlib.dll ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рджрд░реНрдЬ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдпрд╣рд╛рдБ рдкрд░ рдмрд╛рд╣реНрдп рд╡реНрдпрд╛рдЦреНрдпрд╛рдПрдБ рдмрдЪрд╛рд╡ рдореЗрдВ рдЖрддреА рд╣реИрдВред рдпрд╣ ReSharper рд╕реБрд╡рд┐рдзрд╛ рдЖрдкрдХреЛ ReSharper рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рд╕рдВрд╕реНрдерд╛рдУрдВ рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдмрд╛рд╣рд░реА рдПрдиреЛрдЯреЗрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ "рдЯреНрд░рд┐рдХ" рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддрд╛рдХрд┐ рдпрд╣ рдЙрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдФрд░ рдЕрдиреНрдп рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реИ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрдХрд▓рд┐рдд рд╣реЛрдиреЗ рдкрд░ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдП рдЧрдП рдереЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ <ReSharper рд╕реНрдерд╛рдкрд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛> \ Bin \ ExternalAnnotnot рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕реНрдерд┐рдд XML рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред



рдпрд╣ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ ReSharper рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЖрддреЗ рд╣реИрдВред рдпреЗ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд╕реЛрд░реНрд╕ рдХреЛрдб рдПрдирд╛рд▓рд┐рд╕рд┐рд╕ рдФрд░ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯреНрд╕ рд╕реЗ рд▓рд┐рдП рдЧрдП рдереЗред рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░рд╛рдкреНрдд рдЕрдиреБрдмрдВрдз * .Generated.xml рдирд╛рдо рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рджреВрд╕рд░реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк * .Contracts.xml ред



рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ XmlDoc рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рдорд╛рди рдПрдХ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЪреМрдереЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ System.Xml рдЕрд╕реЗрдВрдмрд▓реА рд╕реЗ XmlReader.Create (рд╕реНрдЯреНрд░реАрдо рдЗрдирдкреБрдЯ) рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП, рдиреЛрдЯрдирд▓ рдЕрдиреБрдмрдВрдз рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



< assembly name ="System.Xml, Version=4.0.0.0" > <!-- name , , -->

< member name ="M:System.Xml.XmlReader.Create(System.IO.Stream)" > <!-- , ; , XmlDoc- -->

< attribute ctor ="M:JetBrains.Annotations.NotNullAttribute.#ctor" /> <!-- XmlDoc- -->

< parameter name ="input" >

< attribute ctor ="M:JetBrains.Annotations.NotNullAttribute.#ctor" />

</ parameter >

</ member >

</ assembly >




* This source code was highlighted with Source Code Highlighter .






рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП ReSharper рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдирд┐рдореНрди рддрд░реАрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: <ReSharper install directory> \ Bin \ ExternalAnnotations \ <рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо> .xml рдпрд╛ <ReSharper рдЗрдирд╕реНрдЯреЙрд▓ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА>> Bin \ ExternalAnnotations \ <рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо> <<рдХреЛрдИ рднреА рдирд╛рдо>ред xml , рдЬрд╣рд╛рдБ <рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо> рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдирд╛рдо рд╣реИред рдпрджрд┐ рдЖрдк рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╡реНрдпрд╡рд╕реНрдерд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рдЖрдк рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЗ рдХрдИ рд╕реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред



рдЕрдм рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореИрдиреБрдЕрд▓ рдХрд╛рдо рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдпрд╣ рдПрдХ рдЙрдкрдХрд░рдг рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ рдЬреЛ рдЗрд╕ рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ ReSharper рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рдЖрд╡реЗрджрди



рдмрд╛рд╣реНрдп рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХрдИ рдкреНрд░рдерд╛рдПрдВ рдЬреЛ рд░реАрд╢рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЬреАрд╡рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рддреА рд╣реИрдВред



XmlDocument.SelectNodes (рд╕реНрдЯреНрд░рд┐рдВрдЧ xpath)



рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреИрдирдмреБрд▓ рдПрдиреЛрдЯреЗрд╢рди рдЕрдХреНрд╕рд░ рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдХрд╛ рд╡рд┐рд╖рдп рд╣реЛрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ SelectNodes XmlNode рдХреНрд▓рд╛рд╕ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░ null (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, XmlDeclaration ) рдХреЗ рд▓рд┐рдП рд╡рд╛рдкрд╕ рдЖ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рд╣рдо рдЗрд╕ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдпрд╣ рдХрднреА рднреА рд╢реВрдиреНрдп рдирд╣реАрдВ рд▓реМрдЯрддрд╛ рд╣реИ, - рдПрдХреНрд╕рдПрдордПрд▓рдбрд┐рдореЗрдВрдЯрдореЗрдВрдЯ рд╕реЗ ред рдПрдХ рд╕рдорд╛рдзрд╛рди рдмрд╛рд╣рд░реА рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╣рдЯрд╛рдиреЗ рдпрд╛ рдЗрд╕реЗ рдиреЛрдЯрдиреВрд▓ рд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдЖрдк XmlDocument рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐ рд▓рд┐рдЦрдХрд░ рд╕рд╣реА рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



public static class XmlUtil

{

[NotNull]

public static XmlNodeList SelectNodesEx([NotNull] this XmlDocument xmlDocument, [NotNull] string xpath)

{

// ReSharper disable AssignNullToNotNullAttribute

return xmlDocument.SelectNodes(xpath);

// ReSharper restore AssignNullToNotNullAttribute

}

}




* This source code was highlighted with Source Code Highlighter .






рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рд░ рдмрд╛рд░ рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП SelectElements рдФрд░ SelectAttributes рдЬреИрд╕реЗ рддрд░реАрдХреЗ рдмрдирд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдФрд░ рдХрд╣рд╛рдиреА рд╣реИред



рдЕрднрд┐рдХрдерди



рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЕрдкрдиреА (рдпрд╛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА) рдРрд╕рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдПрд╕реЗрдЯреЗрд░рд┐рдпрдирдореИрдереЛрдб рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдФрд░ рдПрд╢реНрдпреЛрд░рд┐рдпрди рдХреЛрдВрдбрд┐рд╢рди рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк Microsoft рд╕рдВрд╡рд┐рджрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реАрдзреЗ рдЙрдореНрдореАрджрд╡рд╛рд░ рд╕рдВрд╡рд┐рджрд╛ рдФрд░ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:



< assembly name ="Microsoft.Contracts" >

< member name ="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean)" >

< attribute ctor ="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor" />

< parameter name ="condition" >

< attribute ctor ="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)" >

< argument > 0 </ argument >

</ attribute >

</ parameter >

</ member >

< member name ="M:System.Diagnostics.Contracts.Contract.Assert(System.Boolean,System.String)" >

< attribute ctor ="M:JetBrains.Annotations.AssertionMethodAttribute.#ctor" />

< parameter name ="condition" >

< attribute ctor ="M:JetBrains.Annotations.AssertionConditionAttribute.#ctor(JetBrains.Annotations.AssertionConditionType)" >

< argument > 0 </ argument >

</ attribute >

</ parameter >

</ member >

</ assembly >




* This source code was highlighted with Source Code Highlighter .






рдпрджрд┐ рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЯрд░реНрдорд┐рдиреЗрдЯрд░рдкреНрд░реЛрдЧреНрд░рд╛рдо рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдХреА рдУрд░ рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред



рдФрд░ рдЕрдВрдд рдореЗрдВ



рдПрдХ рд▓реЗрдЦ рдореЗрдВ рд╕рд┐рд░реНрдл рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдФрд░ рд▓реЗрдЦ рд▓рд┐рдЦрдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИред рдореЗрд░реА рдХрд╣рд╛рдиреА рдХрд┐рд╕ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдПрдЧреА, рдпрд╣ рдЗрд╕ рдмрд╛рдд рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╡реНрдпрд╛рдкрдХрддрд╛ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛: рдЖрд╢рд╛рд╡рд╛рджреА рдФрд░ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ, рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдПрдиреЛрдЯреЗрд╢рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред



рдФрд░ рд╣рд╛рдБред рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рдХреЛрдб рдПрдиреЛрдЯреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реЛрдЧрд╛!



All Articles