gpt4 book ai didi

c# - 需要将信息保存在对象中的 C# 类方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:16:29 26 4
gpt4 key购买 nike

我在我的 ASP.Net 项目中创建了一个名为 LitHoldModifications 的类。这是代码:

[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() 时,string[] employees 填充了多个名称,但每次代码到达 AffectedEmployeeModifications.Add... 行时,都会创建一个新的 Hashtable 并由Add 方法,因此来自已添加到 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,但我的 OOP 技能显然不够。我应该怎么做?

最佳答案

您应该在类的构造函数中构造您的类所需的对象。您应该像这样添加默认构造函数:

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

然后您可以删除 Add() 和 Delete() 方法中的赋值,因为您可以在这些方法中假设那些成员变量已经有效。

我还建议将您的添加/删除方法更改为返回 void。如果您想要访问添加/删除哈希表,您可以只引用该属性。

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

关于c# - 需要将信息保存在对象中的 C# 类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16343639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com