2010-10-29 50 views
0

在我當前的項目中,每個人都在變量和方法的名稱和名稱都是什麼之後命名。這對於快速理解代碼是很好的,但是有很多長變量名稱會帶來一些麻煩,比如將數據集複製到實體/對象時。所以,當你理解代碼時,可讀性仍然會受到打擊。在VB.NET中使用關鍵字擴展

veryLongVariableName.Id = datasetVeryLongVariableName.Id 
veryLongVariablename.Something = datasetVeryLongVariableName.Something 
etc. 

使用VB.NET的With關鍵字可以提供幫助。

With veryLongVariableName 

    .Id = datasetVeryLongVariableName.Id 
    .Something = datasetVeryLongVariableName.Something 

End With 

現在,我的問題,有沒有使用帶或其他類似的任何方式,但在同一時間幾個變量?就像:

With veryLongVariableName As a, datasetVeryLongVariableName as b 

    a.Id = b.Id 
    a.Something = b.Something 

End With 

我都是描述性的命名約定,但他們確實傾向於混亂的東西。特別是在VB中!

回答

4

如果執行這些賦值集的代碼是單個邏輯操作的一部分,那麼您可以將它重構爲它自己的方法/函數調用。雖然這並沒有具體回答你關於使用倍數的問題,但它可以提高可讀性,使用Code Complete等流行書中的建議。

+0

+1:我認爲這可能會達到相同的點,好主意。 – 2010-10-29 14:26:04

+1

儘管它並不完全符合我的要求,但這是一個很好的答案。儘管如此,我並不是過去重構過的粉絲。我有時會發現它將代碼從上下文中移除,並且使得當您不得不從方法跳轉到方法以查找實際操作時,會使其更難以閱讀(並且穿出F12按鈕;))。 – 2010-11-01 08:52:11

+0

對您的評論+1。我絕對同意它會使調試更乏味。這個想法是,它會讓你的函數/方法更易於測試和理解。從我讀過的所有東西中,正確的封裝是解決代碼複雜性的最佳方法之一。 – wllmsaccnt 2010-11-01 19:55:02

4

不,這是不可能的。

With僅適用於單個對象。見MSDN

然而,你可以,nest With statements(儘管這是不推薦的,因爲你可能最終使你的代碼真的不可讀)。

+0

+1不知道你可以將它們嵌套。很高興你對此發出警告。 – wllmsaccnt 2010-10-29 14:28:20

+0

嵌套,你說。有趣的,但看起來可能會導致各種可讀性問題。 – 2010-11-01 08:54:07

2

在幕後,所有With關鍵字所聲明的臨時變量引用了您指定的對象。其引用將被編譯爲與完全限定對象名稱完全相同的IL代碼,因此不會影響性能。你可以很容易地做到這一點:

Dim a as MyClass = veryLongVariableName 
Dim b as MyOtherClass = datasetVeryLongVariableName 

a.Id = b.Id 
a.Something = b.Something 
+0

確實。但是,我喜歡的是,它有一個開始和結束,並有明確的用途。聲明新變量可能會讓其他人閱讀代碼時感到困惑,所以最終,可讀性水平與此解決方案保持大致相同。雖然答案很好。 – 2010-11-01 08:57:00