Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用外接程序列表有问题吗_C#_List_Class_Add - Fatal编程技术网

C# 使用外接程序列表有问题吗

C# 使用外接程序列表有问题吗,c#,list,class,add,C#,List,Class,Add,更新#1: 这些是我所做的更改,但没有一个有效: 1) 消除静电 string date; string title; string description; string organizer; string place; 2) 让tempe成为本地人 events tempe = new events(); tempe.setDate(event_info[0]); tempe.setTitle(event_info[1]); tempe.setPlace(event_info[2]); t

更新#1: 这些是我所做的更改,但没有一个有效:

1) 消除静电

string date;
string title;
string description;
string organizer;
string place;
2) 让tempe成为本地人

events tempe = new events();
tempe.setDate(event_info[0]);
tempe.setTitle(event_info[1]);
tempe.setPlace(event_info[2]);
tempe.setDesc(event_info[3]);
tempe.setOrganizer(event_info[4]);
eventsarray.Add(tempe);
tempe = null;
3) 直接使用列表

eventsarray.Add(new events());
eventsarray[eventsarray.Count - 1].setDate(event_info[0]);
eventsarray[eventsarray.Count - 1].setTitle(event_info[1]);
eventsarray[eventsarray.Count - 1].setPlace(event_info[2]);
eventsarray[eventsarray.Count - 1].setDesc(event_info[3]);
eventsarray[eventsarray.Count - 1].setOrganizer(event_info[4]);

原始问题

我试图将事件列表存储到列表中,但当我尝试添加新事件时,列表中的所有其他事件实例也被最后一个输入替换。 下面的代码包含使用.Add将新事件存储到列表中的过程,其中包含3组代码,这些代码提供了用于调试的输出

if (eventsarray.Count > 0)
{
    richTextBox1.Text = richTextBox1.Text + "Before Insert: \r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray.Count: " + eventsarray.Count.ToString() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getDate: " + eventsarray[0].getDate() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getTitle: " + eventsarray[0].getTitle() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getPlace: " + eventsarray[0].getPlace() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getDesc: " + eventsarray[0].getDesc() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getOrganizer: " + eventsarray[0].getOrganizer() + "\r\n\r\n";
}


//store all into into a new event in eventsarray

tempe.setDate(event_info[0]);
tempe.setTitle(event_info[1]);
tempe.setPlace(event_info[2]);
tempe.setDesc(event_info[3]);
tempe.setOrganizer(event_info[4]);
//something is wrong with .Add?
eventsarray.Add(tempe);


if (eventsarray.Count > 0)
{
    richTextBox1.Text = richTextBox1.Text + "After Insert: \r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray.Count: " + eventsarray.Count.ToString() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getDate: " + eventsarray[0].getDate() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getTitle: " + eventsarray[0].getTitle() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getPlace: " + eventsarray[0].getPlace() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getDesc: " + eventsarray[0].getDesc() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[0].getOrganizer: " + eventsarray[0].getOrganizer() + "\r\n\r\n";
}
richTextBox1.Text = richTextBox1.Text + "eventsarray.Count: " + eventsarray.Count.ToString() + "\r\n";
richTextBox1.Text = richTextBox1.Text + "Event " + event_info[1] + " has been added to List." + "\r\n\r\n";

for (int i = 0; i < eventsarray.Count; i++)
{
    richTextBox1.Text = richTextBox1.Text + "Looping: "+ i.ToString()  + "\r\n" ;
    richTextBox1.Text = richTextBox1.Text + "eventsarray.Count: " + eventsarray.Count.ToString() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[i].getDate: " + eventsarray[i].getDate() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[i].getTitle: " + eventsarray[i].getTitle() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[i].getPlace: " + eventsarray[i].getPlace() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[i].getDesc: " + eventsarray[i].getDesc() + "\r\n";
    richTextBox1.Text = richTextBox1.Text + "eventsarray[i].getOrganizer: " + eventsarray[i].getOrganizer() + "\r\n\r\n";
}
if(eventsarray.Count>0)
{
richTextBox1.Text=richTextBox1.Text+“插入前:\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray.Count:”+eventsarray.Count.ToString()+“\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getDate:“+eventsarray[0]。getDate()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getTitle:“+eventsarray[0]。getTitle()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getPlace:“+eventsarray[0]。getPlace()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getDesc:“+eventsarray[0]。getDesc()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getOrganizer:“+eventsarray[0]。getOrganizer()+”\r\n\r\n”;
}
//将所有内容存储到eventsarray中的新事件中
临时设置日期(事件信息[0]);
临时设置标题(事件信息[1]);
临时设置地点(事件信息[2]);
临时设置说明(事件信息[3]);
临时组织者(活动信息[4]);
//有问题。是否添加?
eventsarray.Add(tempe);
如果(eventsarray.Count>0)
{
richTextBox1.Text=richTextBox1.Text+“插入后:\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray.Count:”+eventsarray.Count.ToString()+“\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getDate:“+eventsarray[0]。getDate()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getTitle:“+eventsarray[0]。getTitle()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getPlace:“+eventsarray[0]。getPlace()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getDesc:“+eventsarray[0]。getDesc()+”\r\n”;
richTextBox1.Text=richTextBox1.Text+“eventsarray[0]。getOrganizer:“+eventsarray[0]。getOrganizer()+”\r\n\r\n”;
}
richTextBox1.Text=richTextBox1.Text+“eventsarray.Count:”+eventsarray.Count.ToString()+“\r\n”;
richTextBox1.Text=richTextBox1.Text+“事件”+事件信息[1]+”已添加到列表中。“+”\r\n\r\n”;
for(int i=0;i
输出如下(第一个事件和第二个事件的输入不同):


在.Add代码之前,它仍然是非常好的。我尝试使用断点来查看是否有任何循环,使该行运行两次,但它只运行一次。我尝试使用.Insert(0,eventsarray),但问题仍然存在,并且输出完全相同。有人知道吗?谢谢。

如果变量
tempe
是一个仅初始化一次的全局变量(可能在添加之前的某个时间点),则可以解释此问题

如果是这种情况,则在更改tempe变量的值时,会更改上一个Add中引用的相同对象。更改值不会创建tempe类型的另一个实例。当您第二次读取变量tempe时,数组中有两个项,但这两个项都使用上次更新中应用的值引用内存中的同一对象

要解决此问题,您只需:

// This creates a new instance of an Events 
Events tempe = new Events();

tempe.setDate(event_info[0]);
tempe.setTitle(event_info[1]);
tempe.setPlace(event_info[2]);
tempe.setDesc(event_info[3]);
tempe.setOrganizer(event_info[4]);
eventsarray.Add(tempe);
这其中的一部分还有另一个错误。代码
tempe.setDate(事件信息[0])
似乎设置为类事件定义的静态变量
date
。静态变量在类的所有实例之间共享。因此,即使创建新的局部变量Events,设置静态日期也会导致Events类型的所有变量具有相同的值

您需要将这些静态变量更改为实例成员

public class Events
{
   private string date;
   private string title;
   private string description;
   private string organizer;
   private string place;

   public void setDate(string newValue)
   {
        date = newValue;
   }
   .... other set methods....
}
或者更改所有内容并将公共属性与getter和setter访问器一起使用

public class Events
{
   public string Date {get; set;}
   public string Title {get; set;}
   public string Description {get; set;}
   public string Organizer {get; set;}
   public string Place {get; set;}
}

....
// This creates a new instance of an Events 
Events tempe = new Events();
tempe.Date = event_info[0];
.....

如何声明和初始化tempe变量?可能不需要静态变量。以前是否添加了
tempe
?我假设该列表保存同一引用两次。@Steve它是一个全局变量events tempe=new events();。我已经试着像你建议的那样制作本地的,但是还是一样,没有什么区别。同样的结果。