рд░реЛрдЬрд▓рд┐рди рдХреЗ рд╕рд╛рде рдХреЛрдб рдПрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рдирд╛

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

рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЧрдгрдирд╛ рдпреЛрдЧреНрдп () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рдгрд╛рдо рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рдХреА рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, someSequence.Count ()> 0. рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ () рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реЗ рдЕрдиреБрдХреНрд░рдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рд╕рд╣реА рджреГрд╖реНрдЯрд┐рдХреЛрдг рдПрдиреНрдпреБрдореЗрд░реЗрдмрд▓.рдПрдиреА () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рд╣реИред

рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо CodeIssueProvider рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдФрд░ CodeAction, рдЬреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ Enumerable.Any () рдХреЛ рдХреЙрд▓ рдХреЗ рд╕рд╛рде рд╕реНрдерд┐рддрд┐ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдпрд╛рдиреА рд╣рдорд╛рд░реЗ CodeAction рдХреБрдЫ рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рддрд░рд╣ рд╣реЛрдЧрд╛ред рдХреБрдЫ ()> 0 рд╕реЗ someSequence.Any ()ред

рдХреБрдЫ рдЕрддрд┐рд░рд┐рдХреНрдд рд╢рд░реНрддреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рднреА рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЙрд▓реНрдЯрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ 0 <someSequence.Count () рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдорд╛рдорд▓рд╛> 0 рдХреЗ рдмрдЬрд╛рдп рдЯрд╛рдЗрдк> = 1 рдХрд╛ рд░рд┐рдХреЙрд░реНрдб рд╣реИ, рдЬреЛ рддрд╛рд░реНрдХрд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓реЗ рдЬреИрд╕рд╛ рд╣реИред рд╣рдореЗрдВ рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

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

рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ

Roslyn CTP рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдЖрд░рдВрдн рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд░реЛрд╕рд▓рд┐рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рд╕реЗ рдЯрд╛рдЗрдк рдХреЛрдб рдЗрд╢реНрдпреВ рдХреА рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВрдЧреЗред рдЗрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд░рд┐рдкреНрд▓реЗрд╕рдХрд╛рдЙрдВрдЯрд╡рд┐рдердиреА рдирд╛рдо рджреЗрдВред



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



рдпрджреНрдпрдкрд┐ рдЙрджрд╛рд╣рд░рдг Visual Studio рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдЪреАрдЬрд╝реЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдЙрддреНрдкрдиреНрди GetIssue рд╡рд┐рдзрд┐ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ GetIssues рдХреЗ рд▓рд┐рдП рддреАрди рдУрд╡рд░рд▓реЛрдб рд╣реИрдВред рд╣рдо рдУрд╡рд░рд▓реЛрдбрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рдЬрд╣рд╛рдВ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЙрдордирд╕реЗрдВрдЯрдПрдХреНрд╕рдиреЛрдб рдЯрд╛рдЗрдк рд╣реИред рд╢реЗрд╖ рджреЛ рдУрд╡рд░рд▓реЛрдб рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЫреЛрдбрд╝реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрддреНрдкрдиреНрди CodeIssueProvider рд╡рд░реНрдЧ ICodeIssueProvider рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ рдФрд░ ExportSyntaxNodeCodeIssueProvide рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рд╕рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ Visual Studio рдХреЛ ICodeIssueProvide рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЕрдиреБрдмрдВрдз рд╡рд╛рд▓реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╣рдо GetIssues рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ

рдкреНрд░рддреНрдпреЗрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рдЧреЗрдЯрдЖрдИрд╕реВрдЬрд╝ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдкрд╣рд▓реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдЙрди рдиреЛрдбреНрд╕ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рдирдореЗрдВ рд╣рдо рд░реБрдЪрд┐ рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рдЪреВрдБрдХрд┐ рд╣рдореЗрдВ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Count.Count ()> 0, рд╣рдореЗрдВ рдХреЗрд╡рд▓ BinaryExpressionSyntax рдкреНрд░рдХрд╛рд░ рдХреЗ рдиреЛрдбреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо ExportSyntaxNodeCodeIssueProvide рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЕрдиреБрд╕рд╛рд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ:
[ExportSyntaxNodeCodeIssueProvider("ReplaceCountWithAny", LanguageNames.CSharp, typeof(BinaryExpressionSyntax))] class CodeIssueProvider : ICodeIssueProvider ... 

рдпрд╣ рдЖрдкрдХреЛ GetSssues рд╡рд┐рдзрд┐ рдореЗрдВ рдмрд╛рдЗрдирд░реАExpressionSyntax рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрдордирд╕рд╛рдЗрдирдЯреИрдХреНрд╕ рдиреЛрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбрд╛рд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЙрди рдорд╛рдорд▓реЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Enumerable.Count () рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рднрд╛рдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ред рд╣рдо рд╕рддреНрдпрд╛рдкрди рдбреЗрдЯрд╛ рдХреЛ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░ рджреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ GetIssues рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
 public IEnumerable<CodeIssue> GetIssues(IDocument document, CommonSyntaxNode node, CancellationToken cancellationToken) { var binaryExpression = (BinaryExpressionSyntax)node; var left = binaryExpression.Left; var right = binaryExpression.Right; var kind = binaryExpression.Kind; if (IsCallToEnumerableCount(document, left, cancellationToken) && IsRelevantRightSideComparison(document, right, kind, cancellationToken) || IsCallToEnumerableCount(document, right, cancellationToken) && IsRelevantLeftSideComparison(document, left, kind, cancellationToken)) { yield return new CodeIssue(CodeIssue.Severity.Info, binaryExpression.Span, string.Format("Change {0} to use Any() instead of Count() to avoid " + "possible enumeration of entire sequence.", binaryExpression)); } } 


CodeIssue рдХреНрд▓рд╛рд╕ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╣рдо рд▓реМрдЯрддреЗ рд╣реИрдВ, рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕реНрддрд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рддреНрд░реБрдЯрд┐, рдЪреЗрддрд╛рд╡рдиреА рдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреЛрдб рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдкрд╛рдаред

рд╣реЗрд▓реНрдкрд░ рдХреЗ рддрд░реАрдХреЗ

рдЕрдм рд╣рдо рдЕрдкрдирд╛ рдзреНрдпрд╛рди GetIssues рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЛрдВ рдХреА рдУрд░ рджреЗрддреЗ рд╣реИрдВред IsCallToEnumerableCount рд╡рд┐рдзрд┐ рд╕рд╣реА рд╣реИ рдЕрдЧрд░ рд╣рдо рдЬрд┐рд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреБрдЫ рдЕрдиреБрдХреНрд░рдо рдкрд░ рдЧрдгрдирд╛ () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЙрд▓ рд╣реИред рдореИрдВ рдЖрдкрдХреЛ рдлрд┐рд░ рд╕реЗ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ: рд╣рдо рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рднрд╛рд╡реЛрдВ рдХреЛ рдЫрд╛рдирддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╕рдВрдкрддреНрддрд┐ рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдХреЙрд▓ рдорд┐рд▓рддрд╛ рд╣реИред рддреЛ, рдпрджрд┐ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреБрдЫ рдЕрд╕рдорд╛рдирддрд╛ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ редрд╛рдЙрдВрдЯ ()> 0, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЧрдгрдирд╛ () рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрдЧрд╛; рд▓реЗрдХрд┐рди рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдХрд┐ рд╡рд╣ рдПрдиреНрдпреБрдорд░реЗрдмрд▓ рдЯрд╛рдЗрдк рдХрд╛ рд╣реИ?

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рд╕реЗрдореИрдЯрд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, GetIssues рд╡рд┐рдзрд┐ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдПрдХ IDocument рд╣реИ, рдЬреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реИред рд╣рдо рдЗрд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореЙрдбрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣ SymbolInfo рд╕реЗ рд╣реА рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред
SymbolInfo рдХреА рдорджрдж рд╕реЗ рдЖрдк рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╡рд┐рдзрд┐ рдХреЙрд▓ рд╡рд╛рдВрдЫрд┐рдд [Enumerable.Count ()] рдХреА рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рдХрд╛рдЙрдВрдЯ () рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реЛрдЧрд╛ред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ C # рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рдореЗрдВрдЯрд┐рдХ рдореЙрдбрд▓ рдореВрд▓ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ MethodSymbol рд╡рд░реНрдЧ рдХреА рдирд┐рд░реНрдорд╛рдг рдХреА рдЧрдИ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдкреАрдЖрдИ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдмрдиреЗ рд░рд╣реЗрдВред

рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ Enumerable рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ Enumerable.Count () рдореЗрдВ рдХреЙрд▓ рдорд┐рд▓рд╛ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
 private bool IsCallToEnumerableCount(IDocument document, ExpressionSyntax expression, CancellationToken cancellationToken) { var invocation = expression as InvocationExpressionSyntax; if (invocation == null) { return false; } var call = invocation.Expression as MemberAccessExpressionSyntax; if (call == null) { return false; } var semanticModel = document.GetSemanticModel(cancellationToken); var methodSymbol = semanticModel.GetSemanticInfo(call, cancellationToken).Symbol as MethodSymbol; if (methodSymbol == null || methodSymbol.Name != "Count" || methodSymbol.ConstructedFrom == null) { return false; } var enumerable = semanticModel.Compilation.GetTypeByMetadataName( typeof(Enumerable).FullName); if (enumerable == null || !methodSymbol.ConstructedFrom.ContainingType.Equals(enumerable)) { return false; } return true; } 

рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдмрд╛рдЗрдирд░реА рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рддреБрд▓рдирд╛ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП; рдФрд░ рдпрд╣ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ IsRelevantRightSideComparison рдФрд░ IsRelevantLeftSideComparison рдХреЗ рд▓рд┐рдП рдХрд╛рдо рд╣реИред

рдиреАрдЪреЗ рдЙрдирдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ:
 private bool IsRelevantRightSideComparison(IDocument document, ExpressionSyntax expression, SyntaxKind kind, CancellationToken cancellationToken) { var semanticInfo = document.GetSemanticModel(cancellationToken). GetSemanticInfo(expression); int? value; if (!semanticInfo.IsCompileTimeConstant || (value = semanticInfo.ConstantValue as int?) == null) { return false; } if (kind == SyntaxKind.GreaterThanExpression && value == 0 || kind == SyntaxKind.GreaterThanOrEqualExpression && value == 1) { return true; } return false; } private bool IsRelevantLeftSideComparison(IDocument document, ExpressionSyntax expression, SyntaxKind kind, CancellationToken cancellationToken) { var semanticInfo = document.GetSemanticModel(cancellationToken). GetSemanticInfo(expression); int? value; if (!semanticInfo.IsCompileTimeConstant || (value = semanticInfo.ConstantValue as int?) == null) { return false; } if (kind == SyntaxKind.LessThanExpression && value == 0 || kind == SyntaxKind.LessThanOrEqualExpression && value == 1) { return true; } return false; } 

рд╣рд╛рдВ, рд╡реЗ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИрдВ рдХрд┐ рддреБрд▓рдирд╛ рдХреЗ рджреЛрдиреЛрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рд╕рд╛рде рд╣реА рдореВрд▓реНрдп рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рднреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЧрдгрдирд╛ ()> = 0 рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рдХреЛ рдЙрдЬрд╛рдЧрд░ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред

CodeIssueProvider рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛

рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░рд╛ рдкреНрд░рджрд╛рддрд╛ рд╣рдореЗрдВ рдмреНрдпрд╛рдЬ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИред рд╣рдо рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдПрдХ рдирдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдФрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рдореЗрдВ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред Enumerable.Count () рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдФрд░ рдиреЛрдЯрд┐рд╕ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдХрд╛рдЙрдВрдЯ () рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╡рд╛рд▓реЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдирд╣реАрдВ рд╣реИрдВред



рдЕрдЧрд▓рд╛ рдХрджрдо рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред

CodeAction

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ ICodeAction рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред ICodeAction рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ рдПрдХ рд╡рд░реНрдгрди рдФрд░ рдПрдХ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдЗрдХрди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдПрдХрдорд╛рддреНрд░ рдЧреЗрдЯрдПрдбрд┐рдЯ рд╡рд┐рдзрд┐ рдЬреЛ рдПрдХ рд╕рдВрд╢реЛрдзрди рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╡рд░реНрддрдорд╛рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рддреЛ, рдЪрд▓рд┐рдП рд╣рдорд╛рд░реЗ CodeAction рдХреНрд▓рд╛рд╕ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВред
 public CodeAction(ICodeActionEditFactory editFactory, IDocument document, BinaryExpressionSyntax binaryExpression) { this.editFactory = editFactory; this.document = document; this.binaryExpression = binaryExpression; } 

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

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

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЧреЗрдЯрдПрдбрд┐рдЯ рд╡рд┐рдзрд┐ рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рдЧрдПред рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдХрд┐рд╕реА рднреА () рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдирдП рдмрд╛рдЗрдирд░реА рдПрдХреНрд╕рдкреНрд░реЗрд╢рди рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдиреЛрдб рдмрдирд╛рдирд╛ рдПрдХ рд╕рд░рд▓ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐ GetNewNode рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рджреЛрдиреЛрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 public ICodeActionEdit GetEdit(CancellationToken cancellationToken) { var syntaxTree = (SyntaxTree)document.GetSyntaxTree(cancellationToken); var newExpression = GetNewNode(binaryExpression). WithLeadingTrivia(binaryExpression.GetLeadingTrivia()). WithTrailingTrivia(binaryExpression.GetTrailingTrivia()); var newRoot = syntaxTree.Root.ReplaceNode(binaryExpression, newExpression); return editFactory.CreateTreeTransformEdit( document.Project.Solution, syntaxTree, newRoot, cancellationToken: cancellationToken); } private ExpressionSyntax GetNewNode(BinaryExpressionSyntax node) { var invocation = node.DescendentNodes(). OfType<InvocationExpressionSyntax>().Single(); var caller = invocation.DescendentNodes(). OfType<MemberAccessExpressionSyntax>().Single(); return invocation.Update( caller.Update(caller.Expression, caller.OperatorToken, Syntax.IdentifierName("Any")), invocation.ArgumentList); } 

рд░реЛрдЬрд╝рд▓рд┐рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдкреЗрдбрд╝ рдореВрд▓ рдХреЛрдб рдХреЗ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреЗрдбрд╝ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдпрд╛рдиреА рдЬрдм рд╣рдо рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрд╡рдпрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдХреЛрдб рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдореВрд▓ рдиреЛрдб рдХреЛ рдмрдЪрд╛рддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ WithLeadingTrivia рдФрд░ WithTrailingTrivia рдХрд╣рддреЗ рд╣реИрдВред

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

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдХрд╣рдирд╛

рд╣рдорд╛рд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ CodeIssue рдХреЗ рд▓рд┐рдП рдПрдХ CodeAction рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП CodeIssueProvider рд╡рд░реНрдЧ рдореЗрдВ GetIssues рд╡рд┐рдзрд┐ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдХрдИ рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдирдХреЗ рдмреАрдЪ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред

GetIssues рд╡рд┐рдзрд┐ рдХрд╛ рдЕрджреНрдпрддрди рд╣рд┐рд╕реНрд╕рд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
 yield return new CodeIssue(CodeIssue.Severity.Info, binaryExpression.Span, string.Format("Change {0} to use Any() instead of Count() to avoid " + "possible enumeration of entire sequence.", binaryExpression), new CodeAction(editFactory, document, binaryExpression)); 

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



рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдордиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд▓рд╛рдЧреВ рдХрд┐рдпрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред

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


All Articles