我正在使用json.net来实现winform应用程序的memento模式.我正在使用memento在失败的数据库事务上回滚对象.我得到的问题是,当反序列化纪念品时,调用getter而不是setter.让我来证明:
class MyClass
{
public int ID { get; set; }
public string field1 { get; set; }
public string field2 { get; set; }
private List<SomeObject> _someObjects;
public List<SomeObject> SomeObjects
{
get
{
if(_someObjects == null)
{
_someObjects = LoadSomeObjectsFromDB();
}
return _someObjects;
}
set
{
_someObjects = value;
}
}
private List<AnotherObject> _anotherObjects;
public List<AnotherObject> AnotherObjects
{
get
{
if(_anotherObjects == null)
{
_anotherObjects= LoadAnotherObjectsFromDB();
}
return _anotherObjects ;
}
set
{
_anotherObjects = value;
} …
Run Code Online (Sandbox Code Playgroud) 我不明白这个错误,请大家帮助我。为什么我收到此错误..我的查询有问题吗?
这是错误..
#1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,了解在第 7 行“LIMIT 0, 25”附近使用的正确语法
这是我的查询:
SELECT
equivalent
FROM
tb_student_record
INNER JOIN
tb_student ON tb_student_record.stud_id = tb_student.stud_id
WHERE
tb_student_record.instructor_id = 'INST-20131296'
AND tb_student_record.criteria_id = '1'
AND tb_student_record.class_record_id = '1'
AND (CONCAT(stud_fname, ' ', stud_lname) = 'Jeffrey Oliveras'
AND tb_student_record.term = 'Prelim'
Run Code Online (Sandbox Code Playgroud) 正如标题所述,我想知道调用延迟加载的对象属性的最有效方法.考虑以下类定义:
Class MyObject
{
private _stringList = null;
public List<string> StringList
{
set
{
_stringList = value;
}
get
{
if(_stringList == null)
{
_stringList = new List<string>();
//fill the List with strings from some data source
}
return _stringList;
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我想用最昂贵的操作预加载StringList,那会是什么?
MyObject obj = new MyObject();
obj.StringList.ToString(); //?
obj.StringList.Count(); //?
obj.StringList.Equals(null); //?
Run Code Online (Sandbox Code Playgroud)
关于什么:
if(obj.StringList == null){}
Run Code Online (Sandbox Code Playgroud)
我不喜欢这种方法但看起来它比在属性上调用方法要便宜.
我正在寻找一个特定于List的答案以及一个通用的答案object
.
编辑:我知道这被认为是微优化,但这不是问题的关键.我不是在问你是否喜欢我在这里做的事情.我想知道相对于CPU和/或内存使用情况这样做的最佳方法,以及一些证据表明建议的方法实际上比其他方法更好.