c# – 依赖布尔属性

c# – 依赖布尔属性,第1张

概述假设我有一个具有两个布尔属性的对象: public bool AdvancedMode{ get; set; }public bool DumpDiagnostics{ get; set; } 域规则声明除非AdvancedMode也为真,否则不允许DumpDiagnostics.因此,在整个代码中,您可能会看到如下语句: if( options.AdvancedMode && options. 假设我有一个具有两个布尔属性的对象:

public bool AdvancedMode{ get; set; }public bool DumpDiagnostics{ get; set; }

域规则声明除非AdvancedMode也为真,否则不允许DumpDiagnostics.因此,在整个代码中,您可能会看到如下语句:

if( options.AdvancedMode && options.DumpDiagnostics ){ ... }

这样做的问题是很容易忘记添加checkAdvancedMode并意外检查DumpDiagnostics.

if( options.DumpDiagnostics ) // Oh no!

所以我可以想到两种解决方案:

选项1:当AdvancedMode为true时,DumpDiagnostics仅返回true.

public bool DumpDiagnostics{     get{ return AdvancedMode && _dumpDiagnostics; }    set{ _dumpDiagnostics = value; }}

选项2:反映我正在寻找的条件的新属性

public bool CanDumpDiagnostics{ get{ return AdvancedMode && DumpDiagnostics; } }

问题:哪个更好?

选项#1看起来非常简单,不容易出错.关于是否可以转储诊断,总有一个权威.但是,它确实改变了集合 – >获取语​​义,你可以在其中分配DumpDiagnostics = true,然后是if(DumpDiagnostics),返回false.

选项#2很好,因为它隔离了逻辑并明确了目的是什么.我看到的最大缺点是,检查DumpDiagnostics而不是使用新的CanDumpDiagnostics属性仍然很容易.

附:我知道这是一个尴尬的标题,但无法提出更精确的东西,随意修改.

解决方法 选项2对我来说更有意义.我不喜欢可以设置但不“抓住”的属性.我打算建议在setter中抛出一个异常,但后来记得在重置为false的情况下你还必须在AdvancedMode的setter中抛出一个异常.

我将DumpDiagnostics重命名为类似DiagnosticDumpRequested的东西,以使它更清楚,它不能保证它会被尊重.

总结

以上是内存溢出为你收集整理的c# – 依赖布尔属性全部内容,希望文章能够帮你解决c# – 依赖布尔属性所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1215445.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存