2016-11-16 33 views
-3

這是我的財產類:C#列表,它是陣列

class Actions 
{ 
    public string[] Style { get; set; } 
} 

,這是我的主要方法:

Actions action = new Actions(); 

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 

foreach (var item in list) 
{ 
    for (int i = 0; i < action.Style.Length; i++) 
    { 
     action.Style[i] = item.ToString(); 
     Console.WriteLine(action.Style[i]); 
    }     
} 

如何填補列表項的屬性?

這給了我一個例外:
「未將對象引用設置爲對象的實例」。

+7

樣式沒有被實例化。 –

+1

不確定Actions是否是班級中最適合的名稱。它應該是一個單獨的詞。顯然行動是不允許的,所以你可能想要考慮更具描述性的內容。 – openshac

+0

可能我錯了,但是第二個列表項目會覆蓋你的風格的內容......這是打算嗎?你迭代你的數組,但是這個數組有多大?代碼看起來很混亂。 – dannyyy

回答

1

無需逐個添加項目之一,你可以只使用列表的ToArray()方法,像這樣:

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 

Actions action = new Actions { 
    Style = list.ToArray() 
}; 
+0

不會解決原來的問題 – Alex

+0

取決於如果原來的問題是「如何填充列表項的屬性?」 – paul

+0

問題在於'Style'沒有實例化 – Alex

0

您必須創建Style屬性的實例

List<string> list = new List<string>(); 
list.Add("one"); 
list.Add("two"); 
Actions action = new Actions(); 
action.Style=new string[list.Count]; 

foreach (var item in list) 
{ 
    for (int i = 0; i < action.Style.Length; i++) 
    { 
     action.Style[i] = item.ToString(); 
     Console.WriteLine(action.Style[i]); 
    }     
} 
0

正如已經指出的那樣,Style始終爲空,因爲您已共享代碼。 @Eldeniz和@paul已經分享了不同的方法來解決這個問題。很明顯,你的示例代碼只是一個示例代碼片段,所以如果前兩個選項無論如何都不起作用,我們可以考慮另外兩個選項(我只是自由處理這個問題,請原諒任何輸入錯誤)。

1)你可以有你Actions類總是返回一個非空對象

class Actions 
{ 
    private string[] _style; 
    public string[] Style 
    { 
     get { return _style ?? new string[0]; } 
     set { _style = value; } 
    } 
} 

注意,這將讓你隨時查看所請求的樣式屬性的輸出,假設一個空數組和空爲了你的目的,是一樣的。

2)你可以讓你的循環容忍NULL值

foreach (var item in list) 
{ 
    for (int i = 0; i < action?.Style.Length ?? 0; i++) 
    { 
     action.Style[i] = item.ToString(); 
     Console.WriteLine(action.Style[i]); 
    }     
} 

最後,只是作爲一個提示,如果你有你的調試器附加和你單步調試代碼,Visual Studio將幫助您確定這些很容易發生錯誤。花時間與調試器成爲朋友。如果它給你一個你不明白的錯誤,那就快速進行網絡搜索。你未來的自我會感謝你。