Многозначность в VB как в языках C-Style - PullRequest
12 голосов
/ 22 февраля 2010

Есть ли способ сделать это в VB.NET, как в языках C-Style:

struct Thickness
{
    double _Left;
    double _Right;
    double _Top;
    double _Bottom;

    public Thickness(double uniformLength)
    {
        this._Left = this._Right = this._Top = this._Bottom = uniformLength;
    }
}

Ответы [ 2 ]

15 голосов
/ 22 февраля 2010

Расширение на правильный ответ Марка

Этот тип стиля назначения невозможен в VB.Net. Версия кода на C # работает, потому что в C # присваивание является выражением, которое создает значение. Вот почему он может быть связан таким образом.

В VB.Net присваивание - это утверждение, а не выражение. Это не производит никакой ценности и не может быть изменено. Фактически, если вы напишите код «a = b» в качестве выражения, он будет рассматриваться как сравнение значений, а не как присваивание.

Недавнее сообщение Эрика в блоге на эту тему для C #

На уровне языка присваивается утверждение, а не выражение.

9 голосов
/ 22 февраля 2010

Как только я опубликую это, кто-нибудь предоставит пример того, как это сделать. Но Я не думаю, что это возможно . VB.NET рассматривает единичные равные в r-значении как сравнение. Например:

  Dim i As Integer
  Dim j As Integer
  i = 5
  j = i = 4
  Debug.Print(j.ToString())
  j = i = 5
  Debug.Print(j.ToString())

Приведенный выше код выводит 0 (false) и -1 (true).

...