प्रश्न सरल है, जब मैं CustomClass पास करता हूं जो Nothing Run विधि में अंत में Query विधि second.HasValue 0 दिखा रहा है। Nothing नहीं होना चाहिए?

Public Function Run() As Boolean
       Return Query(if(CustomClass IsNot Nothing, CustomClass.Id, Nothing))
End Function

Public Function Query(second As Integer?) As Boolean
    ...
    If second.HasValue Then
        'value = 0 !
        Else
           'some query
        End If

    ...
End Function
3
Arie 17 मई 2018, 12:11

2 जवाब

सबसे बढ़िया उत्तर

यह एक VB.NET विषमता है। Nothingनहीं केवल मतलब null(C#) लेकिन साथ ही default(C#). तो यह किसी दिए गए प्रकार का डिफ़ॉल्ट मान लौटाएगा। आप उस कारण से Nothing को एक Integer चर (या कोई अन्य संदर्भ- या मान-प्रकार) भी निर्दिष्ट कर सकते हैं।

इस मामले में संकलक ने फैसला किया कि Nothing का अर्थ Integer का डिफ़ॉल्ट मान है जो 0 है। क्यों? क्योंकि उसे एक अंतर्निहित रूपांतरण से Id-संपत्ति जो Int32 है।

यदि आप Nullable(Of Int32) का उपयोग करना चाहते हैं:

Return Query(if(CustomClass IsNot Nothing, CustomClass.Id, New Int32?()))

क्योंकि मैंने सी # का उल्लेख किया है, यदि आप वही कोशिश करते हैं तो आपको एक कंपाइलर त्रुटि मिलेगी कि null और int के बीच कोई अंतर्निहित रूपांतरण नहीं है। VB.NET में एक है, डिफ़ॉल्ट मान 0।

4
Tim Schmelter 17 मई 2018, 12:43

इसका कारण इनलाइन If-स्टेटमेंट है।

यह Integer? के बजाय एक Integer लौटाएगा क्योंकि CustomClass.Id स्पष्ट रूप से Integer प्रकार का है।

तो आप या तो CustomClass.Id को Integer? के रूप में परिभाषित कर सकते हैं या CType को इनलाइन If में Integer? में बदलने के लिए उपयोग कर सकते हैं।

Public Function Run() As Boolean
    Return Query(if(CustomClass IsNot Nothing, CType(CustomClass.Id, Integer?), Nothing))
End Function
2
MatSnow 17 मई 2018, 12:30