public class Form
{
internal static Dictionary<string, Form> Cache = new
Dictionary<string, Form>();
public string FormID{get;set;} = string.Empty;
public Form()
{
if (!Cache.ContainsKey(FormID))
Cache.Add(FormID, new Form());
// exception here because new Form() is always called again
}
}
我想在Cache中创建类形式的对象的实例。如果缓存包含FormID属性,则静态字典缓存不会发生任何变化。
缓存必须为具有唯一FormID的表单中的每个实例保留单个实例。这意味着每个表单实例在缓存中都有具有相同FormID的实例。因此,通过克隆缓存创建新实例的速度会很快。这就是我需要做的。
Camilo Terevinto下面很好地回答了这个问题。
发布于 2019-04-25 00:48:18
这段代码没有任何意义:
if (!Cache.ContainsKey(FormID))
Cache.Add(FormID, new Form());
您将始终检查/添加FormId
的默认值。这样,该Dictionary中将只有一个键/值对,因此使用Dictionary将是一种浪费。
为此,您应该使用工厂方法,而不使用默认构造函数:
private Form()
{
}
public static Form BuildForm(string formId)
{
if (!Cache.ContainsKey(formId))
{
Cache.Add(formId, new Form());
}
return Cache[formId].DeepClone(); // using DeepCloner extension
}
发布于 2019-04-25 01:06:13
您可能希望在Cache
中添加this
public class Form
{
internal static Dictionary<string, Form> Cache = new
Dictionary<string, Form>();
public string FormID { get; private set; }
public Form(string formID)
{
this.FormID = formID;
if (!Cache.ContainsKey(formID))
Cache.Add(formID, this); // <--- this instead of new Form();
}
}
this
是指当前构造的Form
实例。
https://stackoverflow.com/questions/55834831
复制相似问题