项目之间类中的对象持久性
本文关键字:对象 持久性 之间 项目 | 更新日期: 2023-09-27 18:13:59
我知道我不应该问这个问题,但不管我错过了什么,我都快疯了!我以前这样做过很多次,我只能把它归结为年老和轻微的衰老。
我有一个类,有两个对象在构造函数中初始化…
public class EbayFunctions
{
private static ApiContext apiContext = null;
private static List<StoreCategoriesFlattened> storeCategories = new List<StoreCategoriesFlattened>();
public EbayFunctions()
{
ApiContext apiContext = GetApiContext();
List<StoreCategoriesFlattened> storeCategories = GetFlattenedStoreCategories();
}
public string GetStoreCategoryIdForItem(string category)
{
var result = storeCategories.Find(x => x.CCDatabaseMatch == category);
return ""; //Ignore will return a value
}
}
然后我有一个表单应用程序(测试线束),利用类和按钮点击我调用一个方法…
namespace EbayTestHarness
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void cmdGetEbayStoreCatID_Click(object sender, EventArgs e)
{
EbayFunctions ebf = new EbayFunctions();
string ddd = ebf.GetStoreCategoryIdForItem("Motors > Bikes");
}
}
}
然而,apiContext
在调用之间持续存在,但storeCategories
在EbayFunctions ebf = new EbayFunctions();
上填充,并且在调用string ddd = ebf.GetStoreCategoryIdForItem("Motors > Bikes");
时为空。
我知道这很愚蠢,但我错过了什么?
你的问题在这里:
private static ApiContext apiContext = null;
private static List<StoreCategoriesFlattened> storeCategories = new List<StoreCategoriesFlattened>();
public EbayFunctions()
{
ApiContext apiContext = GetApiContext(); // local!!
List<StoreCategoriesFlattened> storeCategories = GetFlattenedStoreCategories(); // local!!
}
您没有设置静态字段—您引入了局部变量,然后超出作用域并(最终)被垃圾收集。取出类型指示器设置静态字段:
public EbayFunctions()
{
apiContext = GetApiContext();
storeCategories = GetFlattenedStoreCategories();
}
同样,正如@PatrickHofman指出的,静态成员的初始化应该只做一次——最好是在静态构造函数中:
static EbayFunctions()
{
apiContext = GetApiContext();
storeCategories = GetFlattenedStoreCategories();
}