2014-10-28 1 views
2

Мои коллеги нахмурились, потому что, согласно нашим источникам, я добавил круглые скобки к свойству метода, что привело к переходу stackoverflow. Поскольку я уверен, что я специально не сделал этого, мне интересно, почему-то я использовал неясную комбинацию, которая выполняла эти изменения.VB: скобки автоматически добавляются по ошибке

Этот вид материала:

Public Function Opslaan() As Boolean 
    If something_wrong() Then 
     opslaan = False 
    End If 
    If opslaan = False Then 
     Do_Something_Else() 
    End If 
    Return opslaan 
End Function 

и это был изменен на:

Public Function Opslaan() As Boolean 
    If something_wrong() Then 
     opslaan = False 
    End If 
    If opslaan() = False Then '' See the parentheses here added automatically 
     Do_Something_Else() 
    end If 

    Return opslaan 
End Function 

Любая помощь приветствуется.

+2

Я сомневаюсь, что он был изменен на: 'если что-то не так ', где символ подчеркивания? Кроме того, где переменная 'opslaan'? Метод имеет то же имя, поэтому я предполагаю, что Visual Studio думает, что вы хотите его назвать. Не используйте этот синтаксис VB6 больше ('opslaan = false' означает то же самое, что и' Return false'). –

+0

Я предпочитаю использовать следующую логику (так же, как в C#): вызов функции или метода -> добавить круглые скобки (даже без параметров), вызывая свойство -> нет круглых скобок. Однако, если ваши стандарты кодирования говорят, что вы не должны добавлять круглые скобки к вызову метода без функций, вы должны обязать его. – Styxxy

+0

Тим: вы правы, это старый код VB6, который все еще находится в некоторых блоках кода. Переменная opslaan не объявляется по причине, о которой вы уже упоминали. Я разработал это в комментарии к ответу JoelC. –

ответ

2

Это похоже на старый старый код VB6, преобразованный в VB.NET.

Проблема заключается в том, что VB6 позволяет обрабатывать текущее имя функции как переменную и обновлять ее значение во всем методе. Затем, когда вы выходите из метода, какое бы значение эта переменная не возвращала вызывающему абоненту. Этот синтаксис запутан и никогда не должен использоваться даже в VB6, поскольку есть лучший способ.

Обновить все код, который вы нашли, как это что-то вроде:

Public Function Opslaan() As Boolean 
    Dim result As Boolean = True 

    If something_wrong() Then 
     result = False 
    end if 
    If result = False Then 
     Do_Something_Else() 
    End If 

    Return result 
End Function 

Это гораздо понятнее код и никогда не будет ошибочно называют ту же процедуру.

Кроме того, это полностью личное предпочтение, но я предпочитаю не проверять булевы с операторами равенства. So If result = False Then будет If Not result Then и If result = true Then будет If result Then. Это почти всегда кажется мне более чистым для булевых.

+0

Спасибо, JoelC, но это действительно «старый» проект vb6, который обновляется до трехуровневой модели. Я полностью согласен с тем, что этот синтаксис просто не сделан, но там вы идете, это наследие для вас, я думаю. Так что, кроме справедливых комментариев, я просто хотел узнать, не может ли что-то добавить эти скобки неохотно? Ненавижу идею о том, что код можно изменить, без меня меняя его ;-) –

+0

@ChrisO. Тем не менее, мои комментарии в основном стоят. Компилятор автоматически добавляет скобки, чтобы попытаться «помочь» использовать правильный синтаксис при вызове вашей функции. Так как единственное, что определено в этой области с этим именем, это функция. Прекратите использование имени функции в качестве переменной для обработки возвращаемого значения, и ваша проблема исчезнет. – JoelC

+0

Чтобы упростить мой комментарий выше: да, скорее всего, IDE автоматически добавила скобки, и это не вы. – JoelC