2016-11-16 48 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将帮助您确定这些很容易发生错误。花时间与调试器成为朋友。如果它给你一个你不明白的错误,那就快速进行网络搜索。你未来的自我会感谢你。