Задолбался чистить код

Aug 10, 2007 16:59

Решил почистить код, а то поднадоело листать портянку предупреждений которую выдает Visual Studio. Этих Warnings она выдает в количестве аж 912 штук, включая установленных вручную используя #warning и несколько Maximum number of warnings has been exceeded. (Максимальное количество предупреждений для одного проекта - 100). Так что предупреждений реально больше!


Что мне попалось:
Variable declaration without an 'As' clause; type of Object assumed.
Примеры:

Public Shared Function FooRRM(ByVal Id) As String

Dim vFoo

Dim FooDetails(FooThes.RecordCount - 1)

Public Const Empty = Nothing

Решение:
добавить декларативную часть с типом переменной, те:

Public Shared Function FooRRM(ByVal Id As String) As String

Dim vFoo As String = String.Empty

Dim FooDetails(FooThes.RecordCount - 1) As Object

Public Const Empty As Object = Nothing

Function 'Foo' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used.

Примеры:

Private Function Foo(ByRef vFoo As String) As String

vFoo = InputBox("Введите значение параметра (число)", "", vFoo)

End Function

Private Function Foo(ByVal stFoo As FooState) As String

Select Case stFoo

Case Actual : Return "у"

Case Historical : Return "л"

Case Deleted : Return "а"

End Select

End Function

часто встречается в функциях с Select Case без Case Else части, причем на вход Case поступает Enum значение. Для такого случая можно один из вариантов сделать Case Else.
Для остальных случаев:
- Присвоить значение переменной с именем функции до вызова Exit Function или End Function
- Добавить оператор Return с возвращаемым значением

"Variable 'Foo1' is used before it has been assigned a value"

Примеры:

Dim Foo1, Foo2 As String

Foo2 = "Test"

Foo1 = Foo1 & Foo2 & " or "

Предупреждение возникает как правило в случае использования неинициализированных переменных, либо если инициализация происходит в блоках - try catch finally или Select Case.
Перед использованием значения переменных необходимо инициализировать хотя бы nothing , в случае блока - try catch finally до входа в блок, в случае Select Case сделать один из вариантов Case else.

"Name '__Foo' is not CLS-compliant"

Пример:

Protected Overrides Sub __Foo()

Если имя начинается с одного или нескольких подчеркиваний "_". Visual Basic Language Concepts - Declared Element Names
Element names starting with an underscore (_) are not part of the Common Language Specification (CLS), so CLS-compliant code cannot use a component that defines such names. However, an underscore in any other position in an element name is CLS-compliant.

Уделение подчеркиваний решает проблему.

Статистика предупреждений по solution:
30% "Variable is used before it has been assigned a value";
13% "Variable is passed by reference before it has been assigned a value.";
11% "Name is not CLS-compliant.";
12% "Access of shared member, constant member, enum member or nested type through an instance; qualifying expression will not be evaluated.";
10% "Function doesn't return a value on all code paths. ";
13% "Operands of type Object used in expressions for , statements; runtime errors could occur.";

Дополнительные материалы:


Больше половины уже заборол, но вот что делать с не CLS-compliant именами ума не приложу, на них уже ссылаются из других (прикладных) сборок.

vb, работа, зло

Previous post Next post
Up