मैंने वीबीएनईटी में C#
के default
कीवर्ड समकक्ष की खोज की और this question पर आया।वीबी न्यूलबल्स और नोथिंग्स
तब मुझे उत्सुकता मिली। कुछ पृष्ठभूमि - मैं एक्सेल स्प्रैडशीट को पार्स करने के साथ काम कर रहा हूं, जहां कई कॉलम शून्य हो सकते हैं, और मेरे लिए एक पूर्णांक कॉलम 0
और null
होने के बीच निश्चित रूप से एक अंतर है।
Function Test(ByVal i As String) As Nullable(Of Integer)
Dim j As Integer
If Integer.TryParse(i, j) Then
Return j
Else
Return Nothing
End If
End Function
इस सही ढंग से काम करने लगता है:
मैं एक छोटे से पार्स विधि लिखा था। लेकिन यहाँ, मैं एक Integer
लौट सकते हैं अगर मैं चाहता हूँ:
Function Test(ByVal i As String) As Nullable(Of Integer)
Return 2 'or Return Nothing
End Function
जो मैं C#
में कर सकते हैं और साथ ही:
static void Main(string[] args)
{
int? j = Test("1");
}
public static int? Test(string i)
{
return 2; //or return null
}
उपरोक्त कोड में, अगर मैं एक int
को j
बदलने के लिए, मैं हूँ एक संकलन-समय रूपांतरण त्रुटि प्राप्त करें, जो कुल समझ में आता है।
अब मेरे सवाल - VB में, अगर मैं एक समान दृष्टिकोण का प्रयास:
Sub Main()
Dim j As Integer = Test("hello")
End Sub
Function Test(ByVal i As String) As Nullable(Of Integer)
Dim j As Integer
Return If(Integer.TryParse(i, j), j, Nothing)
End Function
या, अपने परीक्षण मामले में जहां i
एक Integer
यह के रूप में लिखा जा सकता है में:
Function Test(ByVal i As String) As Nullable(Of Integer)
Return DirectCast(Nothing, Integer)
End Function
Nothing
VB.NET में काम करता है, इस कोड को संकलित और बिना त्रुटि के चलाता है - जे इंटीजर के डिफ़ॉल्ट 0 पर सेट है।
यह मेरे लिए इतना गंदा लगता है। इस परिदृश्य में आप किसी भी चेतावनी या त्रुटियों के बिना विधि के इरादे को कुछ हद तक बदल सकते हैं। मैं बस उत्सुक हूं, मान लीजिए, क्या यह Nothing
वीबी में काम करता है, या यह उद्देश्य उद्देश्य का एक अनजान उप-उत्पाद है?
हाँ, '0' vb में करने के लिए इंट के डिफ़ॉल्ट ... – Codexer