【问题标题】:Assigning a string to a ArrayList in c#在 C# 中将字符串分配给 ArrayList
【发布时间】:2011-10-15 13:40:52
【问题描述】:

请告诉我代码的问题

ArrayList dtMessages = new ArrayList();
while ((reader.Read()))
{
                    String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
                    dtMessages.Add(temp);
}

我收到错误消息“对象引用未设置为对象的实例。”

抱歉,我是 C# 新手。请多多包涵。谢谢

编辑:我只想补充一点。 dtMessages 变量被声明为类变量。它没有在任何函数内声明。你认为这是问题所在吗?

编辑:代码

namespace Faye
{
   public partial class _Default : System.Web.UI.Page
   {
     public List<String> dtMessages=new List<String>();
     private List<String> LoadMessages()
     {
       while ((reader.Read()))
       {
             String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
             dtMessages.Add(temp);
       }
     }
}

}

在 dtMessages 的声明中添加静态没有区别

【问题讨论】:

  • 哪一行抛出异常?
  • 阅读器是什么类型的?另外:你有什么理由使用ArrayList而不是像List&lt;string&gt;这样的泛型?
  • 我将 ArrayList 更改为 List。 reader 的类型为 SqlDataReader。
  • 那么,您是否正在访问在类范围之外无法访问的成员?如果可能,请尝试发布代码的相关部分。
  • 我正在从该类中的方法访问该类变量。添加代码

标签: c# string arraylist


【解决方案1】:

听起来您正试图从静态方法访问对象成员。

类似这样的:

class Program {

    private List<string> myList = new List<string>();

    static void Main () {

        // will throw error
        myList.Add("String!");

    }
}

试试这个:

class Program {

    private static List<string> myList = new List<string>();

    static void Main () {

        myList.Add("String!");

    }
}

我可能在这里错了,因为我觉得第一个没有编译。

【讨论】:

  • 我认为这是问题+1
  • 不,我不是在静态方法中访问它。我正在访问非静态方法中的全局变量。我尝试将全局变量声明为静态,但我得到了同样的错误
  • -1 第一个例子不会抛出任何错误,因为编译器不会让你执行它
  • @Christian:只是在黑暗中刺伤。当我发布它并没有说明这是一个例外,只是一个“错误”
【解决方案2】:

正如@Anthony 所假设的,它的第一个示例无法编译,所以这不是问题。

如果抛出异常的那一行是

dtMessages.Add(temp); 

而异常是“Object reference not set to an instance of an object.”,表示dtAccess为null,所以还没有初始化,但这很奇怪,因为有一行:

ArrayList dtMessages = new ArrayList();

另一种可能是某处有赋值,例如:

dtMessages = null;

所以我会检查所有对 dtMessages 的引用以寻找分配。

【讨论】:

    【解决方案3】:

    试试这个,为要设置的列表创建一个自动属性,并使用一个临时列表来收集数据,然后将其分配给该属性。这样临时列表就会启动,然后填充数据并分配给等待数据的属性:)

    namespace Faye
    {
       public partial class _Default : System.Web.UI.Page
       {
          public List<String> dtMessages { get; set; } //made property available
    
          private List<String> LoadMessages()
          {
             var tempList = new List<string>();
    
             while ((reader.Read()))
             {
                 String temp = reader[0].ToString() + "," + reader[1].ToString() + "," + reader[2].ToString();
                 tempList.Add(temp);
              }
    
             dtMessages = tempList; //assign the temp list to the property now
          }
       }
    }
    

    如果出现上述错误,则您的 SqlReader 为空,或者您引用的一个或多个索引为空。我会调试并验证它们都有有效值。

    【讨论】:

      【解决方案4】:

      下一个:

      1- 阅读器对象为空,您在该行中得到异常:

      while ((reader.Read()))

      2- 阅读器对象不包含 3 个元素,在这种情况下您会收到 ArgumentOutOfRangeException

      3- reader 中的对象之一为 null,由于 .ToString() 方法而引发异常

      我会把钱花在 3 上

      【讨论】:

      • 我也会这么说,但他说异常是由指令 dtMessages.Add(temp);
      猜你喜欢
      • 2015-09-15
      • 2020-07-23
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多