2011-02-08 22 views
7

मैं structs की एक सूची है: user_stocks = new List<stock_Str>();structs की सूची - struct वस्तुओं के मूल्य हमेशा रिक्त है

struct परिभाषित किया गया है:

public struct stock_Str 
{ 
    public String name; 
    public int quote ; 
    public int chenge; 
    public bool quote_a; 
    public bool chenge_a; 
    public int[] rate_alarm; 
    public int[] chenge_alarm; 
} 

जब मैं सूची मुझे क्या करना आइटम जोड़ने:

stock_Str str = new stock_Str(); 
str.name = tbStockName.Text; 
str.chenge_a = false; 
str.quote_a = false; 
str.quote = 0; 
str.chenge = 0; 
str.chenge_alarm = new int[2]; 
str.rate_alarm = new int[2]; 

for (int i = 0; i < 2; i++) 
{ 
    str.rate_alarm[i] = 0; 
    str.chenge_alarm[i] = 0; 
} 

_mainApp.user_stocks.Add(str); 

अपनी समस्याओं:

  1. जब मैं सूची आइटम (प्रकार की संरचना) के मूल्यों को बदलने की कोशिश करता हूं, तो यह उन्हें नहीं बदलता है!

  2. दो int के मेरे दो सरणी हमेशा शून्य पर सेट हो जाते हैं!

मैं इसे कैसे ठीक कर सकता हूं?

+2

क्या आपको लगता है कि कक्षा का उपयोग करना अधिक उपयुक्त होगा –

+4

यदि आप उत्परिवर्तनीय structs का उपयोग करते हैं, तो वे क्या गलत हो सकते हैं (और वे शायद ही कभी हैं) का एक अच्छा उदाहरण है। – Botz3000

उत्तर

9

ए: यह बी पर एक संरचना नहीं होनी चाहिए: संरचना का "मान" कभी शून्य नहीं होता है; यहां तक ​​कि Nullable<T> का null धुआं, दर्पण और गलत दिशा के साथ एक जादू-चाल है

समस्या का पुन: प्रयास करें;

1: हां, ऐसा इसलिए है क्योंकि structs की प्रतिलिपि semantics है; यदि आप एक प्रतिलिपि बदल दिया - नहीं एक ही एक

2: शायद एक ही बात

यहाँ एक अधिक उपयुक्त कार्यान्वयन है;

public class Stock 
{ 
    public string Name {get;set;} 
    public int Quote {get;set;} 
    public int Chenge {get;set;} 
    public bool QuoteA {get;set;} 
    public bool ChengeA {get;set;} 
    public int[] RateAlarm {get;set;} 
    public int[] ChengeAlarm {get;set;} 
} 

मैं स्पष्ट नहीं क्या पिछले 2 की मंशा है हूँ, लेकिन व्यक्तिगत रूप से अगर यह एक गतिशील संग्रह है, उदाहरण के लिए मैं एक सूची पसंद करेंगे: मैं इसे अपनी समस्याओं का सबसे ठीक कर देंगे कल्पना:

private List<int> rateAlarms; 
    public List<int> RateAlarms { 
     get { return rateAlarms ?? (rateAlarms = new List<int>()); } 
    } 
+0

पहला धन्यवाद, दूसरा आप क्या सलाह देते हैं? कक्षाओं की सरणी का उपयोग या एक सामान्य सूची का उपयोग कर? मूल रूप से मेरे स्टॉक बहुत गतिशील होते हैं, मेरा मतलब है कि अक्सर मुझे जोड़ने और गुणों को बदलने की आवश्यकता होती है। @Marc Gravell –

+0

"कक्षाओं की सरणी का उपयोग या एक सामान्य सूची का उपयोग कर?" मुझे समझ में नहीं आता - किस संदर्भ में? लेकिन किसी भी तरह से, जोड़ना और बदलना गुणों को हटाने में कोई समस्या नहीं है ... –

2

एक संरचना एक वैल्यू प्रकार है ताकि आप इसे केवल प्रतिलिपि संपादित करने के लिए इसका संदर्भ न दें।

इसके अलावा आपको यहां एक कक्षा का उपयोग करना चाहिए।

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