2009-06-30 189 views
16

我知道C#有using關鍵字,但是using會自動處理對象。C#中「With ... End With」的等價性?

Visual Basic 6.0中是否有與With...End With等效?

+2

「with」實際上在VB之前就已經存在了。它存在於Pascal中,用於處理記錄類型。不知道帕斯卡是否從別處借鑑了這個想法。 – JeffK 2010-10-29 15:32:57

回答

28

C#沒有相應的語言結構。

+3

這是真的。但是如果你有一個返回'this'的方法的類,那麼你可以將這些方法鏈接在一起。 – Dlongnecker 2010-10-29 15:26:08

5

沒有等同於With ... End With在C#

這裏的a comparison chart爲你說明了Visual Basic和C#之間的區別。

+0

該比較圖表很棒。我正在從VB過渡到C#,這將是非常有用的。 – 2011-05-11 13:36:05

2

C#中沒有等價的結構。這是一個Visual Basic 6.0/VB.NET功能。

31

這不是等價的,但這種語法對你有用嗎?

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

「With」不會創建實例,所以這是錯誤的。 – 2017-04-28 21:02:58

6

我認爲下面VB相當於:

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

將是這是C#

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

唯一的區別是,在VB中,標識符沒有名稱「q」,但僅僅是一個缺省標識符,當遇到一個句點時沒有使用y之前的其他標識符。

+1

外卷有什麼?對不起,但這並沒有任何接近的效果。它只是一堆給制定者的電話。 – tomfanning 2010-11-11 22:03:32

+2

外括號設置變量q的範圍。假設對象表達式是一個類而不是一個結構體,我認爲上面的VB.Net和C#代碼幾乎完全相同。前面的語句是如何使用with語句的一個例子,後面的語句是C#翻譯。 C#示例使用了幾個setter,因爲這是任意選擇的VB.net示例。重要的一點是,「with」等同於定義一個臨時變量,然後在任何時候使用一個沒有前面標識符的句點來使用它。 – supercat 2010-11-13 17:55:35

15

沒有等價物,但我認爲討論語法可能很有趣!

我很喜歡;

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

其他建議?

我無法想象添加這種語言功能將是困難的,基本上只是一個預處理。

編輯:

我生病的等待這個功能,所以這裏是和擴展,實現了類似的行爲。

/// <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.. 
}); 

編輯:有趣的是,似乎有人打我一記重拳,再次,這個「解決方案」。呵呵..