如何在C#中创建可通过字符串赋值的布尔类型属性?
问题
是否可以在C#中创建一个本质为bool类型,但可通过string类型赋值的属性?想要实现的效果如下:
string stringValue = "true"; object.BoolValue = stringValue ; bool boolValue = object.BoolValue;
原本想使用get; set;实现,但转换时始终出错。可以在对象构造函数中转换该string,但如果后续需要修改该属性呢?是否需要单独的转换方法(转换逻辑并非仅识别"true"/"false",而是需要匹配预设的真值列表和假值列表,不匹配则抛出参数异常)?
提问者尝试的代码
private bool _readOnly; public bool ReadOnly { get => _readOnly; set => _readOnly = Convert.ToBoolean(value); } public DeviceProperty(string readOnly) { ReadOnly = readOnly; }
解决方案1:单独设置方法
下面是一个可行的实现方式,通过单独的设置方法处理字符串到bool的转换,同时保留直接读取bool值的便利性:
string stringValue = "true"; object.SetBoolValue(stringValue); bool boolValue = object.BoolValue; // 类内实现 public bool BoolValue { get; private set; } public bool SetBoolValue(string stringValue) { string[] trueValues = { /* 预设真值列表 */ }; string[] falseValues = { /* 预设假值列表 */ }; if (trueValues.Contains(stringValue)) { BoolValue = true; return true; } if (falseValues.Contains(stringValue)) { BoolValue = false; return true; } // 也可在此处抛出参数异常,根据需求调整 return false; }
核心需求是能轻松对bool值进行逻辑运算,因此采用单独的Set方法而非重载Get逻辑,既满足赋值时的字符串转换需求,又保证读取时直接操作原生bool类型。
解决方案2:存储原始字符串,动态判断布尔值
后续发现,若真值和假值列表会频繁且意外地变化(比如原本的假值可能变为真值),那么存储bool类型的方案并不合适。此时改为存储原始字符串值,通过GetBool()方法根据当前的真值/假值列表动态判断布尔值,确保每次判断都基于最新的规则。
内容的提问来源于stack exchange,提问作者Jan Daliba
相关产品推荐
相关产品推荐

