2014-09-28 88 views
-2

我有一个问题,如果我想编辑一个值到一个对象并再次调用它,我会得到旧值而不是新值。为什么我不能在对象中修改这些值?

这里是我的职责,以获取类:

public static Clan GetClanByID(int Index) 
    { 
     foreach (Clan Clan in Clans) 
     { 
      if (Clan.ID == Index) 
      { 
       return Clan; 
      } 
     } 

     return new Clan() 
     { 
      ID = -1, 
      Name = "NULL", 
      IconID = -1 
     }; 
    } 

这里是我的功能来更新值:

public static void ChangeAnnouncement(int ClanID, int Mode, string Text) 
    { 
     if (ClanID != -1) 
     { 
      Clan Clan = GetClanByID(ClanID); 

      if (Mode == 0) 
      { 
       Clan.Description = Text; 
      } 
      else if (Mode == 1) 
      { 
       Clan.News = Text; 
      } 
     } 
    } 

这里是类:

public class Clan 
{ 
    public int ID; 
    public int LeaderID; 
    public int Extension; 
    public int CreationDate; 
    public long EXP; 
    public long IconID; 
    public string Name; 
    public string News; 
    public string Description; 
    public List<ClanWars> ClanWars; 
    public List<ClanUsers> Users; 
    public List<ClanCoMasters> CoMasters; 
    public List<ClanPendingUsers> PendingUsers; 
    public LeaderInformations LeaderInformations; 
} 

例:旧的值是“123”,比我称为ChangeAnnouncement的函数,并将值设置为“1234567890”,之后我得到该值使用GetClanByID(ID).Description,但我仍然会得到旧值(“123”)

我希望你能帮助我。

+1

这就是为什么你不应该使可变的结构。 – SLaks 2014-09-28 17:26:30

+1

你还没有宣布任何结构......你为什么要谈论它们?请注意,如果你没有找到一个家族,你正在创建一个新家族 - 但不会将它添加到你的收藏中。 – 2014-09-28 17:28:14

+0

我编辑了你的问题。你说'结构'但是使用了一个类,所以我把所有的提到都放到了'结构'中。 'Structure'在C#中是一个特殊的含义。首先,它们应该是不可变的。你实际上并没有创建一个结构,而是一个班级。 – zmbq 2014-09-28 17:32:01

回答

1

你每次都要返回一个新的氏族。你忘了将新创建的家族添加到Clans

+0

我将新创建的氏族添加到氏族。 – lokko 2014-09-28 17:32:10

+1

@lokko然后它发生在您提供的代码之外的某处。 – 2014-09-28 17:38:13

+0

哦,你正在改变1的氏族模式吗? – zmbq 2014-09-28 17:48:19

相关问题