अशक्त संदर्भ प्रकार की जानकारी FirstOrDefault से उजागर नहीं होती है


10

मैं C # 8.0 में नए अशक्त संदर्भ प्रकार की सुविधा का परीक्षण करना चाहता था ।

मैंने .NET कोर 3.0 को लक्षित करते हुए एक नई परियोजना .csprojशुरू की, फ़ाइल में अशक्त संदर्भ प्रकारों को सक्षम किया और कोडिंग शुरू की। मैंने एक साधारण सूची बनाई जो एक लेती है string[]और stringउस सरणी में वापस आती है जो बराबर होती है abc। अब, क्योंकि मैं निश्चित नहीं हूं कि abcवास्तव में सरणी में मौजूद है, मैं उपयोग करता हूं FirstOrDefault(), जो कि डिफ़ॉल्ट होना चाहिए nullअगर एक मैच नहीं मिला है।

using System;
using System.Linq;

public string FindArgument(string[] args)
{
    var arg = args.FirstOrDefault(x => x == "abc");
    return arg;
}

मेरी विधि वापस आती है string, जो अब गैर-अशक्त प्रकार की होनी चाहिए । चूंकि मैं वापस लौट सकता हूं, इसलिए मैं उपरोक्त पद्धति की उम्मीद करूंगा कि शायद अशक्त चर वापस करते समय चेतावनी दी जाए । ऐसा नहीं होता।FirstOrDefault()null arg

FirstOrDefault()विज़ुअल स्टूडियो के लिए हस्ताक्षर को देखते हुए , यह स्पष्ट है कि क्यों : विधि एक लौटाता है string, न कि योग्य समकक्ष जिसकी string?मैं अपेक्षा करता हूं।

नीचे दी गई विधि निकाय के उपयोग से मुझे अपेक्षित चेतावनी मिलती है:

var arg = args.Contains("abc") ? "abc" : null;
return arg;

क्या सिस्टम लाइब्रेरी (इस उदाहरण में System.Linq) वास्तव में .NET कोर 3.0 को लक्षित करते समय अशक्तता की जानकारी को उजागर नहीं करती है?

जवाबों:


9

ऐसा लगता System.Linqहै कि 3.0 रिलीज में अशक्त एनोटेट नहीं है। तो अशक्त संदर्भ प्रकार सही चेतावनी का उत्सर्जन नहीं करते हैं।

आप रोसलिन रेपो में इसी तरह की समस्याओं की जांच कर सकते हैं । गितुब पर यह खुला मुद्दा आपकी समस्या के समान है। उस समस्या में एक योगदानकर्ता वर्तमान समस्या की व्याख्या करता है:

System.Linqकोरटेक्स की मास्टर शाखा में अशक्त एनोटेट है , लेकिन रिलीज / 3.0 में नहीं । इसलिए संकलक में कुछ भी अप्रत्याशित नहीं है। कंपाइलर को कुछ डायग्नॉस्टिक्स प्रदान करते हुए दिखाना चाहिए कि आप अशक्त-विस्मृत सामान का उपयोग कर रहे हैं।


इसे जोड़ने के लिए, आप आज सही एनोटेशन प्राप्त करने के लिए इस पैकेज का उपयोग कर सकते हैं।
canton7

1
.NET कोर 3.1 में अभी भी यही स्थिति है। यह अशक्त संदर्भ प्रकारों के साथ कम अच्छा काम करता है। मेरा मानना ​​है कि पुल अनुरोध कोरफैक्स / पुल / 40651 इसे ठीक करता है, लेकिन जाहिर तौर पर हमें इंतजार करना होगा । .NET 5 पाने के लिए इंतजार करना होगा :-(
जेपी स्टिग नीलसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.