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";
        }
    }