列出类中的字符串

时间:2013-06-21 15:51:28

标签: c# list

我的课程有多个public accessor,其中一个是List<String> p {get; set;}

我的问题是,这个:

在实例化这个类的代码中,我循环遍历一个可以包含多行p的字符串,因此对于p的每一行我想将它添加到List<String> p

所以我试过这个:

  instancenam.p.AddRange(string.Split(new char[] {':',':'})[2]);

它让我获得字符串中的第二组值,如:23A:TETCGR

当我运行代码时,我得到以下两个错误:


错误1:

'System.Collections.Generic.List.AddRange(System.Collections.Generic.IEnumerable)'的最佳重载方法匹配有一些无效的参数


错误2:

参数1:无法从'string'转换为'System.Collections.Generic.IEnumerable'*


我用Google搜索,但对回复感到困惑; - )

foreach(字符串str in lines)                 {                     //需要检查长度是否大于3。                     if(str!=“4:”&amp;&amp; str!=“”)                     {                         //存储标签名称

                    if (str.StartsWith(":"))
                    {
                        tag = str.Split(new char[] { ':', ':' })[1];

                        SavedTag = tag;

                        switch (MessageType)
                        {

                                // Tag 13C Time Indication
                                if (tag == "13C")
                                {
                                    mt202.tag13C.Add(str.Split(new char[] { ':', ':' })[2]);
                                } 
                                break;
                        }

好的,如此命名为推荐我现在有以下内容。我的字符串包含多个标记:13C:

使用上面的Add i get对象引用未设置为对象的实例

编辑:

    public class MT202
    {
        public string tag20 { get; set; }
        public string tag21 { get; set; }
        public List<String> tag13C { get; set; }
        public string tag32A { get; set; }
        public string tag33B { get; set; }
     }

 // Code below is from the calling class
     if (tag == "13C")
                               {
                                    char[] delimiters = new char[] { ':', ':' };
                                    string[] splitValues = str.Split(delimiters);
                                    string singleValue = splitValues[2];
                                    List<string> mt202.tag13C = new List<string>();
                                    mt202.tag13C.Add(singleValue);

                                  //  mt202.tag13C.Add(str.Split(new char[] { ':', ':' })[2]);
                                }

1 个答案:

答案 0 :(得分:4)

让我们分解这一行:

instancenam.p.AddRange(string.Split(new char[] {':',':'})[2]);

我将假设string部分实际上是变量的名称(string不是有效的标识符)。我将在下面称之为text

扩展代码如下所示:

char[] delimiters = new char[] {':',':'};
string[] splitValues = text.Split(delimiters);
string singleValue = splitValues[2];
List<string> list = instancenam.p;
list.AddRange(singleValue);

这会产生相同的错误,因为您正在调用AddRange,这意味着需要集合值 - 但您只提供价值。如果您只想添加单个值,请使用Add

instancenam.p.Add(text.Split(new char[] {':',':'})[2]);

我建议将代码分解为 bit 更像上面的代码 - 也许不会分解到那么远,但至少有一点点。 (你可以为分隔符设置一个只读静态字段,一开始。)

此外,我强烈建议您将属性从p重命名为更有意义的,在PascalCase中符合.NET命名约定。

编辑:现在已经使用以下内容编辑了帖子:

  

使用上面的Add i get对象引用未设置为对象的实例

这表明mt202mt202.tag13Cnull引用,但我们无法分辨哪一个。你应该用调试器来研究它。