0

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

我的问题是,这个:

在实例化此类的代码中,我正在循环一个可以包含多行 p 的字符串,因此对于 pi 的每一行都希望将其添加到List<String> p

所以我试过这个:

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

这让我得到一个字符串中的第二组值包括:23A:TETCGR

当我运行代码时,出现以下两个错误:


错误一:

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


错误2:

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


我已经用谷歌搜索了,但对回复感到困惑;-)

foreach (string str in lines) { // 需要检查长度是否大于 3 if (str != "4:" && 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:

使用上面的添加我得到对象引用未设置为对象的实例

编辑:

    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]);
                                }
4

1 回答 1

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);

这将给出相同的错误,因为您正在调用AddRangewhich 旨在获取一值 - 但您只提供一个。如果您只想添加一个值,请使用Add

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

我建议将代码分解成更像上面的代码的东西——也许没有分解得那么远,但至少有一点点(首先,您可以为分隔符设置一个只读静态字段。)

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

编辑:现在帖子已被编辑为:

使用上面的添加我得到对象引用未设置为对象的实例

这表明mt202ormt202.tag13C是一个null参考,但我们无法确定是哪个。您应该使用调试器对其进行研究。

于 2013-06-21T15:56:05.527 回答