C# 在构造函数中使用字符串变量时,如何定义处理到bool的隐式转换的类?
我定义了一个缓存数据库中的值的类,并添加了隐式转换,因此它可以作为布尔变量工作。 (此类用于获取/设置项目中的用户首选项) 用法:C# 在构造函数中使用字符串变量时,如何定义处理到bool的隐式转换的类?,c#,database,caching,parameters,implicit-conversion,C#,Database,Caching,Parameters,Implicit Conversion,我定义了一个缓存数据库中的值的类,并添加了隐式转换,因此它可以作为布尔变量工作。 (此类用于获取/设置项目中的用户首选项) 用法: BoolParameter parshowmessageafterupdate=new BoolParameter("UserParShowMessageAfterUpdate"); //later use if(parshowmessageafterupdate) { //show message x } //or later in Options Scre
BoolParameter parshowmessageafterupdate=new BoolParameter("UserParShowMessageAfterUpdate");
//later use
if(parshowmessageafterupdate)
{
//show message x
}
//or later in Options Screen set the preference
//this part is what doesnt work
//parshowinitialmessage=true;
//i would have to do this instead:
parshowinitialmessage.Val=true;
如何在不传递参数名称的情况下定义隐式运算符setter?
与每次读取/获取参数时直接访问数据库相比,此缓存类是否最佳?为什么为空布尔值
你不能使用:
public class BoolParameter
{
private static string _ParameterName = String.Empty;
private static bool _CurrentVal = false;
public BoolParameter(string ParameterName)
{
_ParameterName = ParameterName;
}
public bool Val
{
get
{
return DataBaseAccesor[_ParameterName].Equals("Y").Equals(_CurrentVal);
}
set
{
_CurrentVal = value;
DataBaseAccesor[_ParameterName] = value ? "Y" : "N";
}
}
如果执行从
bool
到BoolParameter
的隐式转换,则需要仅基于bool
值创建一个新对象,并且必须默认设置任何其他参数。如果您只想设置一个现有对象的Val
参数,那么您已经知道该怎么做了。另外,从技术上讲,从boolpareter
到bool
的转换应该是明确的,因为它表示数据丢失(特别是参数名)。boolpareter
在给定场景中看起来不是一个好主意,相反,您想要的是有某种管理器,处理值转换(有一组方法:AsBool
,AsInt
,SetBool
等,带有索引器,其中键是字符串
参数名)。用法是Manager.Instance[“UserParShowMessageAfterUpdate”].AsBool()
和Manager.Instance[“…”。SetBool(true)
。你不是自欺欺人吗?一天结束时,你的目标是将特定参数的值写入数据库。不知道参数名称怎么做?第二,我在你的代码中看到一个bug。你的{get}指令可能会为两个单独的BoolParameter对象返回两个不同的结果。什么是_CurrentVal?它是静态的吗?@YaugenVlasau这种技术的思想是,您会大量读取变量值,而很少修改它。因此,在这种情况下,您希望将值缓存在_CurrentVal中,并且只在第一次从数据库中获取它。a您是对的_CurrentVal和_ParameterName不会是静态的……这是我在发布问题时犯的一个错误:/@juharr@sinatr它可以直接用一个管理器来完成(代码中描述的数据库访问或是某种管理器),但我想将所有这些逻辑封装在一个类中,以便可以方便地使用/维护(就像它是一个带有额外mojo的bool变量)由我和其他同事编写。可空bool用于检查布尔变量是否尚未初始化(首次访问该变量),因此在这种情况下,我必须从数据库中获取真/假值,否则bool类型在c中默认初始化为假#
public class BoolParameter
{
private static string _ParameterName = String.Empty;
private static bool _CurrentVal = false;
public BoolParameter(string ParameterName)
{
_ParameterName = ParameterName;
}
public bool Val
{
get
{
return DataBaseAccesor[_ParameterName].Equals("Y").Equals(_CurrentVal);
}
set
{
_CurrentVal = value;
DataBaseAccesor[_ParameterName] = value ? "Y" : "N";
}
}