using System;
using System.Collections.Generic;
class Parent
{
public Child Child { get; set; }
}
class Child
{
public List<string> Strings { get; set; }
}
static class Program
{
static void Main() {
// bad object initialization
var parent = new Parent() {
Child = {
Strings = { "hello", "world" }
}
};
}
}
उपरोक्त कार्यक्रम ठीक संकलित का कारण बनता है, लेकिन साथ वस्तु संदर्भ वस्तु का एक उदाहरण के लिए सेट नहीं रनटाइम पर दुर्घटनाओं।आरंभ किया जा रहा सूची संपत्ति NullReferenceException
यदि आप उपरोक्त स्निपेट में देखते हैं, तो मेरे पास बाल गुणों को प्रारंभ करते समय छोड़ा गया है।
जाहिर प्रारंभ करने में सही तरीका है: जब वह पहली बार निर्माण देखता
var parent = new Parent() {
Child = new Child() {
Strings = new List<string> { "hello", "world" }
}
};
मेरा प्रश्न क्यों सी # संकलक शिकायत नहीं करता है?
टूटा प्रारंभिक वैध वाक्यविन्यास क्यों है?
var parent = new Parent() {
Child = {
Strings = { "hello", "world" }
}
};
Ah readonly गुण, धन्यवाद! – Ajai
संग्रह प्रारंभकर्ताओं के पास केवल-पढ़ने योग्य गुणों के साथ कुछ लेना देना नहीं है। यह कोड काम करता है क्योंकि आप 'स्ट्रिंग्स = नई सूची();' कन्स्ट्रक्टर में नहीं, क्योंकि संपत्ति में 'निजी सेट' है। –
GSerg
कोड फिर से पढ़ें। बाल संपत्ति संग्रह नहीं है, यह केवल पढ़ने की संपत्ति है। –