Подтвердить что ты не робот

Эквивалентность "С... End With" в С#?

Я знаю, что С# имеет ключевое слово using, но using автоматически удаляет объект.

Существует ли эквивалентность With...End With в Visual Basic 6.0?

4b9b3361

Ответ 1

С# для этого не имеет эквивалентной языковой конструкции.

Ответ 2

Это не эквивалентно, но будет ли этот синтаксис работать для вас?

Animal a = new Animal()
{
    SpeciesName = "Lion",
    IsHairy = true,
    NumberOfLegs = 4
};

Ответ 3

Нет эквивалента, но я думаю, что обсуждение синтаксиса может быть интересно!

Мне очень нравится;

NameSpace.MyObject.
{
    active = true;
    bgcol = Color.Red;
}

Любые другие предложения?

Я не могу себе представить, что добавление этой языковой функции было бы затруднительным, по существу, просто препроцессором.

EDIT:

Мне было больно ждать этой функции, так что вот и расширение, которое достигает аналогичного поведения.

/// <summary>
/// C# implementation of Visual Basics With statement
/// </summary>
public static void With<T>(this T _object, Action<T> _action)
{
    _action(_object);
}

Использование

LongInstanceOfPersonVariableName.With(x => {
     x.AgeIntVar = 21;
     x.NameStrVar = "John";
     x.NameStrVar += " Smith";
     //etc..
});

РЕДАКТИРОВАТЬ: Интересно, что, похоже, кто-то избил меня ударом, опять же, с этим "решением". О, хорошо..

Ответ 4

Я думаю, что эквивалент следующего VB:

With SomeObjectExpression()
  .SomeProperty = 5
  .SomeOtherProperty = "Hello"
End With

Будет ли это С#:

{
  Var q=SomeOtherExpression();
  q.SomeProperty = 5;
  q.SomeOtherProperty = "Hello";
}

Единственное реальное различие заключается в том, что в vb идентификатор не имеет имени "q", но является просто идентификатором по умолчанию, используемым, когда период встречается без какого-либо другого идентификатора перед ним.

Ответ 5

Нет эквивалента With With... End With in С#.

Здесь сравнительная таблица для вас, которая иллюстрирует различия между Visual Basic и С#.

Ответ 6

В С# нет эквивалентной структуры. Это функция Visual Basic 6.0/VB.NET.