मेरे पास एक वर्ग है जिसमें कुछ गुण हैं:

public class PossibleSettingsData
{
    public int Value { get; set; }
    public string Definition { get; set; }
    public object Meaning { get; set; }
}

और मेरे पास इस वर्ग की एक सरणी है और मैं इसे बहु-आयामी सरणी की तरह तुरंत चालू करना चाहता हूं:

var PossibleSettings=new PossibleSettingsData[]
{
    { 5 ,"4800 baud", 4800}, \\It means I want to Value=5 and Definition="4800 baud" and Meaning=4800
    { 6 ,"9600 baud", 9600},
    { 7 ,"19200 baud" ,19200}
};

ऐसा करने के लिए मुझे PossibleSettingsData कक्षा में क्या परिवर्तन करने होंगे? क्या यह बिल्कुल संभव है? मैंने ऐसा कुछ देखा है जब मैं Dictionary<,> को पॉप्युलेट करना चाहता हूं तो मुझे लगता है कि शायद मैं यह कर सकता हूं।

-2
mohammad 22 अगस्त 2021, 13:23

2 जवाब

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

मुझे नहीं लगता कि सटीक सिंटैक्स प्राप्त करना संभव है, लेकिन यदि आप वह करना चाहते हैं जो Dictionary करता है, तो आपको दूसरे प्रकार को परिभाषित करने की आवश्यकता है:

class PossibleSettingsDataList: IEnumerable<PossibleSettingsData> {
    private List<PossibleSettingsData> list = new();
    public void Add(int value, string definition, object meaning) {
        list.Add(new() {
            Value = value, Definition = definition, Meaning = meaning
        });
    }

    public IEnumerator<PossibleSettingsData> GetEnumerator()
        => ((IEnumerable<PossibleSettingsData>)list).GetEnumerator()

    IEnumerator IEnumerable.GetEnumerator()
        => ((IEnumerable)list).GetEnumerator();
}

यहाँ महत्वपूर्ण बात Add विधि और IEnumerable<PossibleSettingsData> के अनुरूप है। यह आपके द्वारा अपने नेस्टेड {} में डाली गई 3 चीजों को Add विधि में पास करने की अनुमति देता है। अधिक जानकारी के लिए, देखें यह.

तब आप कर सकते हैं:

var PossibleSettings=new PossibleSettingsDataList
{
    { 5 ,"4800 baud", 4800},
    { 6 ,"9600 baud", 9600},
    { 7 ,"19200 baud" ,19200}
}.ToArray();
2
Sweeper 22 अगस्त 2021, 13:43

एक कंस्ट्रक्टर जोड़ना:

public class PossibleSettingsData
{
  public int Value { get; set; }
  public string Definition { get; set; }
  public object Meaning { get; set; }
  public PossibleSettingsData()
  {
  }
  public PossibleSettingsData(int value, string definition, object meaning)
  {
    Value = value;
    Definition = definition;
    Meaning = meaning;
  }
}

हम लिख सकते हैं कि:

var PossibleSettings = new PossibleSettingsData[]
{
  new PossibleSettingsData(5 ,"4800 baud", 4800), 
  new PossibleSettingsData(6 ,"9600 baud", 9600),
  new PossibleSettingsData(7 ,"19200 baud" ,19200)
};

लेकिन कंस्ट्रक्टर के बिना:

var PossibleSettings = new PossibleSettingsData[]
{
  new PossibleSettingsData { Value = 5, Definition = "4800 baud", Meaning = 4800},
  new PossibleSettingsData { Value = 6, Definition = "9600 baud", Meaning = 9600},
  new PossibleSettingsData { Value = 7, Definition = "19200 baud", Meaning = 19200}
};

सी # 9+ के साथ भी हम लिख सकते हैं, अगर मैं समझ गया (मैं सी # 7.3 का उपयोग करता हूं):

var PossibleSettings = new PossibleSettingsData[]
{
  new(5 ,"4800 baud", 4800),
  new(6 ,"9600 baud", 9600),
  new(7 ,"19200 baud" ,19200)
};

बेशक हम एक विशेष संग्रह वर्ग बना सकते हैं जैसा कि @Sweeper द्वारा उजागर किया गया है।

2
Olivier Rogier 22 अगस्त 2021, 13:41