2013-05-02 34 views
1

我在我的ASP.Net项目中创建了一个名为LitHoldModifications的类。这里是代码:需要C#类的方法,坚持信息已存在对象

[Serializable] 
public class LitHoldModifications 
{ 
    private Boolean _changed; 
    private Hashtable _added; 
    private Hashtable _deleted; 

    public Boolean Changed 
    { 
     get { return _changed; } 
     set { _changed = value; } 
    } 

    public Hashtable Added 
    { 
     get { return _added; } 
     set { _added = value; } 
    } 

    public Hashtable Deleted 
    { 
     get { return _deleted; } 
     set { _deleted = value; } 
    } 

    public Hashtable Add(String item1, String item2) 
    { 
     Added = new Hashtable(); 
     Added.Add(item1, item2); 
     return Added; 
    } 

    public Hashtable Delete(String item1, String item2) 
    { 
     Deleted = new Hashtable(); 
     Deleted.Add(item1, item2); 
     return Deleted; 
    } 
} 

我遇到的问题是,我需要能够添加多个项目到这个类的实例。我不得不这样做的代码是(在一个aspx页面):

public LitHoldModifications AffectedEmployeeModifications 
    { 
     get 
     { 
      if (ViewState["AffectedEmployeeModifications"] != null) 
       return (LitHoldModifications)ViewState["AffectedEmployeeModifications"]; 
      else 
       return null; 
     } 

     set 
     { 
      ViewState["AffectedEmployeeModifications"] = value; 
     } 
    } 

protected void ProcessAffectedviaJavascript() 
    { 
     string[] employees = HiddenEmployeesPopup.Value.Split('|'); 
     if (employees.Length>1) { 
     foreach (string s in employees) 
     { 
      if (s.Length > 1) 
      { 

       string Anumber = s.Split('@')[0]; 
       string AName = s.Split('@')[1]; 

       ListItem item = new ListItem(); 
       item.Text = AName; 
       item.Value = Anumber; 
       lstSelEmployees.Items.Add(item); 

       //Clear values in temp hidden field: 
       HiddenEmployeesPopup.Value = ""; 

       AffectedEmployeeModifications.Add(Anumber, AName); 
       AffectedEmployeeModifications.Changed = true; 

      } 

     } 

     } 

当我运行我的代码,并获得ProcessAffectedviaJavascript(),字符串[]员工填充了多个名字,但每次码获取到AffectedEmployeeModifications.Add行....由Add方法创建并返回新的Hashtable,因此已添加到AffectedEmployeeModifications的员工的任何早期字符串都将丢失。我能想到的来解决这个问题的唯一方法是改变Add方法采取AffectedEmployeeModifications作为参数,并做到这一点:

public Hashtable Add(Hashtable lhm, String item1, String item2) 
    { 
     lhm.Add(item1, item2); 
     return lhm; 
    } 

,然后在我的aspx.cs:

AffectedEmployeeModifications = AffectedEmployeeModifications.Add(AffectedEmployeeModifications, Anumber, AName); 

这虽然看起来不是OOP-y,而且我的面向对象技能显然是想要的。我应该怎么做?

回答

5

您应该在类的构造函数中构造您的类需要的对象。您应该添加一个默认的构造是这样的:

public LitHoldModifications() 
{ 
    Added = new Hashtable(); 
    Deleted = new Hashtable(); 
} 

然后你就可以在你的添加删除该任务()和delete()方法,因为你可以在这些方法中,这些成员变量就已经是有效的假设。

我也建议改变你的添加/删除方法返回void。如果你想访问新增/删除的哈希表,你可以直接引用该属性。

var myLitInstance = new LitHoldModifications(); 
myLitInstance.Add("value1", "value2"); 
Hashtable tbl = myLitInstance.Added; 
+0

这个作品非常漂亮,非常感谢! – Melanie 2013-05-02 18:29:29