VB.NET是否有直接等價於C#out
函數參數,其中傳遞給函數的變量不需要初始化?是否有C#out參數的VB.NET等價物?
回答
否,不存在在VB中out
關鍵字等效。
然而,VB不會自動初始化所有局部變量的方法,所以你可以使用ByRef
而不需要先明確地初始化變量。
實施例:
Sub Main()
Dim y As Integer
Test(y)
End Sub
Sub Test(ByRef x As Integer)
x = 42
End Sub
(如果在框架檢查代碼(例如Double.TryParse),可能會看到<OutAttribute>
加到參數,但只有有差別時呼叫被編組爲COM互操作或平臺調用。)
C#版本
void TestFunc(int x, ref int y, out int z) {
x++;
y++;
z = 5;
}
Vb.net版本
Sub TestFunc(ByVal x As Integer, ByRef y As Integer, ByRef z As Integer)
x += 1
y += 1
z = 5
End Sub
更新
正如評論指出不要忘了你的initialze參數會成爲我們編在出時隙
否,不存在等效構建體,其允許非初始化變量被傳遞給方法而不發出警告,但是,如在我的question and answer指定上的ByRef
參數定義一個<Out()>
attribute,雖然提到VB ig對它的處理,是被C#視爲out
參數。
所以,我會預先初始化參考變量Nothing
和指定<Out()> ByRef
來表示的意向(如C#用戶訪問過你的方法,將工作)。
如果你覺得你知道,當你打算訪問默認Nothing
另有未分配的參考變量,你可以在項目級別上設置了「警告配置」 到「無」「的變量之前分配使用」 (項目屬性>編譯,並且您可能希望在更改此設置之前將配置設置爲「所有配置」),或者在VS2015(VB.NET 14)中,可以使用#Disable Warning BC42030
。
您可以在VB.NET中使用傳遞引用方法。
你需要在C#Out參數的機制,因爲它不會讓你使用任何變量沒有初始化它。
VB.NET並不需要一個特殊的關鍵字,因爲它本身可以自動進行。
只要使用ByRef。
我在VB.NET這個問題,我稱那傳遞的數組回功能「由參」。
即使編譯器標記它作爲一個警告,感覺不錯。修復是非常簡單的,可能是很好的編程習慣。
我改變
Dim m_arr_values() as Integer
fnRetArray(m_arr_values)
到
' Even though 'Nothing' is the default value, setting it
' stops the compiler complaining.
Dim m_arr_values() as Integer = Nothing
fnRetArray(m_arr_values)
編碼時,如果變量名是描述它還可以幫助...
Sub fnCreatePalette(ByRef arr_in_pal() As color, ByRef arr_out_pal() as uinteger)
...
End Sub
VB有這應該是相同的屬性作爲C#出來,但今天你仍然會收到警告,即使你使用它。有關於修復它在github的vblang區域的細節。 https://github.com/dotnet/vblang/issues/67。
- 1. VB.NET HashMap等價物
- 2. 是否有Python的Term :: ANSIScreen等價物?
- 3. 是否有「python -i」的ruby等價物?
- 4. PHP的ArrayObject是否有in_array等價物?
- 5. 是否有Android的Application :: onDestroy()等價物?
- 6. 是否有.Net System.Data的Java等價物?
- 7. excel vlookup是否有Java的等價物?
- 8. 是否有ToolStripButton的WPF等價物?
- 9. 是否有jQuery.offset的Elm等價物?
- 10. C#'params'是否存在JavaScript等價物?
- 11. 是否有一個packaged_task :: set_exception等價物?
- 12. 在Java中是否有TweenMax等價物
- 13. TabBarIOS - 是否有viewDidAppear或viewWillAppear等價物?
- 14. Rails Fixtures是否有.net等價物?
- 15. 在Windows中是否有XEmbed等價物?
- 16. 在Python中是否有Rake等價物?
- 17. 廚師中是否有puppet_nist等價物?
- 18. Filehelpers,Super CSV:是否有Python等價物?
- 19. Tomcat是否有mod_sed等價物?
- 20. tf_utils包是否有非GPU等價物?
- 21. 是否有silverlight response.redirect等價物?
- 22. 在Doxygen中是否有@inheritDoc等價物?
- 23. 管道是否有'liftIO`等價物?
- 24. C++的std :: bind2nd是否有內置的Haskell等價物?
- 25. 是否有Java的LineNumberReader的C#等價物?
- 26. 下面的C#代碼應該是VB.NET的等價物嗎?
- 27. 什麼是VB.NET中的CType的C#等價物?
- 28. Java中的「Buffer」類是否有Objective-C等價物?
- 29. 是否有與C#相當的ActiveRecord#find_by等價物?
- 30. Python模塊中是否有C的main()等價物?
有沒有辦法避免編譯警告,而不禁用警告。 – cspolton 2010-12-05 12:34:36