2010-12-01 7 views
5

मैं एक struct (.NET 3.5) है:सी # में किसी स्ट्रक्चर में मानों की एक सूची असाइन करें?

struct ColumnHeadings 
     { 
      public string Name ; 
      public int Width ; 
     } ; 

और जब मुझे लगता है कि struct करने के लिए मानों की सूची आवंटित करने के लिए कोशिश मैं 'के लिए ... परोक्ष परिवर्तित नहीं कर सकते प्रकार स्ट्रिंग/पूर्णांक' एक मिलता है:

private void doSomething() 
{ 
    ColumnHeadings[,] ch = new ColumnHeadings[,]{{"column1",100}, 
       {"column2",100},{"column3",100}}; 
} 

क्या संरचना मानों को बहु-आयामी सरणी के रूप में उसी तरह असाइन किया जा सकता है? या मैं का उपयोग कर ?:

ch.Name = "column 1"; 

अद्यतन द्वारा मान निर्दिष्ट करने की आवश्यकता है: सही समाधान मार्क उत्तम प्रतिक्रिया के लिए

धन्यवाद है:

Struct:

struct ColumnHeadings 
     { 
      private readonly string name; 
      private readonly int width; 
      public string Name { get { return name; } } 
      public int Width { get { return width; } } 
      public ColumnHeadings(string name, int width) 
      { 
       this.name = name; 
       this.width = width; 
      } 
     } 

फिर विधि में:

var ch = new[]{new ColumnHeadings("column1",100), 
      new ColumnHeadings("column2",100), 
      new ColumnHeadings("column3",100)}; 

और link क्यों म्यूट्यूबल structs एक अच्छा विचार नहीं है।

+0

जिज्ञासा से बाहर, क्यों 'ColumnHeadings' दो आयामी है? –

+0

@ सी रॉस - मैशप एरेज़/structs मैशप करने की कोशिश करने के कारण 2 डी ... :) –

+0

एक 2 डी सरणी में होमजोनस डेटा होना चाहिए; यह वास्तव में एक 1-आयामी सरणी है जहां प्रत्येक तत्व में 2 मान होते हैं - –

उत्तर

7

सबसे पहले, कि शायद एक structसभी

पर नहीं होना चाहिए वाक्य रचना हो जाएगा:

ColumnHeadings[] ch = new ColumnHeadings[]{ 
    new ColumnHeadings{Name="column1",Width=100}, 
    new ColumnHeadings{Name="column2",Width=100} 
}; 

हालांकि, इसके अलावा में आप सार्वजनिक क्षेत्रों में उतरते हैं, तथ्य यह है कि यह एक परिवर्तनीय संरचना है - दोनों खतरनाक हैं। सच में नहीं।

मैं एक निर्माता जोड़ना होगा:

var ch = new []{ 
    new ColumnHeadings("column1", 100), 
    new ColumnHeadings("column2", 100) 
}; 
साथ

:

struct ColumnHeadings 
{ 
    private readonly string name; 
    private readonly int width; 
    public string Name { get { return name; } } 
    public int Width { get { return width; } } 
    public ColumnHeadings(string name, int width) 
    { 
     this.name = name; 
     this.width = width; 
    } 
} 
+0

+1 अलग है, लेकिन सुझाव दें कि "ऐसा न करें" का शीर्षक 1 जोड़ें :) –

+0

यह बहुत अधिक समझ में आता है, लेकिन उसका बहु- आयामी। यह 2-डी सरणी के साथ कैसे काम करेगा? –

+0

@CRoss - प्रश्न पर मेरी टिप्पणी देखें; 2-डी है, आईएमओ, एक त्रुटि –

संबंधित मुद्दे