小书童教育机构 發表於 2023-8-21 00:00:00

你应该知道的States字段使用规范

<p>
        <span><strong>前言</strong></span></p>
<p>
        最近在工作中了遇到了一些内容,觉着有必要和大家分享下,我们为了统一数据库表的状态字段,统一数据库表设计,简化字段在程序开发中的使用方式,下面话不多说了,来一起看看详细的介绍吧。</p>
<p>
        <span><strong>解决方式</strong></span></p>
<p>
        States对应位域枚举StatesFlags。</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlightersql" id="highlighter_617107">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                        <div class="line number38 index37 alt1">
                                                                38</div>
                                                        <div class="line number39 index38 alt2">
                                                                39</div>
                                                        <div class="line number40 index39 alt1">
                                                                40</div>
                                                        <div class="line number41 index40 alt2">
                                                                41</div>
                                                        <div class="line number42 index41 alt1">
                                                                42</div>
                                                        <div class="line number43 index42 alt2">
                                                                43</div>
                                                        <div class="line number44 index43 alt1">
                                                                44</div>
                                                        <div class="line number45 index44 alt2">
                                                                45</div>
                                                        <div class="line number46 index45 alt1">
                                                                46</div>
                                                        <div class="line number47 index46 alt2">
                                                                47</div>
                                                        <div class="line number48 index47 alt1">
                                                                48</div>
                                                        <div class="line number49 index48 alt2">
                                                                49</div>
                                                        <div class="line number50 index49 alt1">
                                                                50</div>
                                                        <div class="line number51 index50 alt2">
                                                                51</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain">/// 数据状态枚举</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain"></code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql plain"></code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain"></code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql keyword">public</code> <code class="sql plain">enum StatesFlags</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="sql spaces"> </code><code class="sql plain">{</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 可用状态</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">Enabled = 1,</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 停用状态</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">Disabled = 1 &lt;&lt; 1,</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 移除(相当于逻辑删除)</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">Removed = 1 &lt;&lt; 2,</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 已确认(已经审核通过)</code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">Confirmed = 1 &lt;&lt; 3,</code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number38 index37 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 锁定</code>
</div>
                                                                <div class="line number39 index38 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number40 index39 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number41 index40 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number42 index41 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number43 index42 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">Locked = 1 &lt;&lt; 4,</code>
</div>
                                                                <div class="line number44 index43 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number45 index44 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// 锁定登录</code>
</div>
                                                                <div class="line number46 index45 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number47 index46 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number48 index47 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number49 index48 alt2">
                                                                        <code class="sql spaces">  </code><code class="sql plain"></code>
</div>
                                                                <div class="line number50 index49 alt1">
                                                                        <code class="sql spaces">  </code><code class="sql plain">LockLogin = 1 &lt;&lt; 5</code>
</div>
                                                                <div class="line number51 index50 alt2">
                                                                        <code class="sql spaces"> </code><code class="sql plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>业务模型使用方式</strong></span></p>
<p>
        在业务模型中,需要关注模型的特定状态集,写入新的状态时使用模型中的States, 读取时每一个状态独立提供读取实现。如下图中IsRemoved状态 以后大家一看代码就知道这个模型到底有几个状态</p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_858724">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">///&lt;sumary&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 状态集,写</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">///&lt;/sumary&gt;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public StatesFlags States { get; set; }</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 只读</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public bool IsRemoved =&gt; States.HasFlag(StatesFlags.Removed);</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>StatesFlags的4个扩展方法</strong></span></p>
<p>
        <img title="你应该知道的States字段使用规范" alt="你应该知道的States字段使用规范" src="https://zhuji.jb51.net/uploads/img/202305/c9fab4019ffe648529a0a86debb42f3b.jpg"></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_644293">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                        <div class="line number30 index29 alt1">
                                                                30</div>
                                                        <div class="line number31 index30 alt2">
                                                                31</div>
                                                        <div class="line number32 index31 alt1">
                                                                32</div>
                                                        <div class="line number33 index32 alt2">
                                                                33</div>
                                                        <div class="line number34 index33 alt1">
                                                                34</div>
                                                        <div class="line number35 index34 alt2">
                                                                35</div>
                                                        <div class="line number36 index35 alt1">
                                                                36</div>
                                                        <div class="line number37 index36 alt2">
                                                                37</div>
                                                        <div class="line number38 index37 alt1">
                                                                38</div>
                                                        <div class="line number39 index38 alt2">
                                                                39</div>
                                                        <div class="line number40 index39 alt1">
                                                                40</div>
                                                        <div class="line number41 index40 alt2">
                                                                41</div>
                                                        <div class="line number42 index41 alt1">
                                                                42</div>
                                                        <div class="line number43 index42 alt2">
                                                                43</div>
                                                        <div class="line number44 index43 alt1">
                                                                44</div>
                                                        <div class="line number45 index44 alt2">
                                                                45</div>
                                                        <div class="line number46 index45 alt1">
                                                                46</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">/// 数据状态枚举</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">public static class StatesFlagsExtends</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 设置可用</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="states"&gt;状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public static StatesFlags SetEnable(this StatesFlags states)</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">if (states.HasFlag(StatesFlags.Disabled)) states = states ^ StatesFlags.Disabled;</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">if (!states.HasFlag(StatesFlags.Enabled)) states = states | StatesFlags.Enabled;</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">return states;</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 设置停用</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="states"&gt;状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public static StatesFlags SetDisable(this StatesFlags states)</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">if (states.HasFlag(StatesFlags.Enabled)) states = states ^ StatesFlags.Enabled;</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">if (!states.HasFlag(StatesFlags.Disabled)) states = states | StatesFlags.Disabled;</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">return states;</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 移除状态</code>
</div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="states"&gt;状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number30 index29 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="state"&gt;要移除的状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number31 index30 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public static StatesFlags RemoveState(this StatesFlags states, StatesFlags state)</code>
</div>
                                                                <div class="line number32 index31 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number33 index32 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//也可以通过如下计算去除一个状态states = states &amp; ~StatesFlags.Disabled;</code>
</div>
                                                                <div class="line number34 index33 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">return states ^ state;</code>
</div>
                                                                <div class="line number35 index34 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number36 index35 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;summary&gt;</code>
</div>
                                                                <div class="line number37 index36 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// 附加状态</code>
</div>
                                                                <div class="line number38 index37 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;/summary&gt;</code>
</div>
                                                                <div class="line number39 index38 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="states"&gt;状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number40 index39 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">/// &lt;param name="state"&gt;要附加的状态&lt;/param&gt;</code>
</div>
                                                                <div class="line number41 index40 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public static StatesFlags AttachState(this StatesFlags states, StatesFlags state)</code>
</div>
                                                                <div class="line number42 index41 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number43 index42 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">return states | state;</code>
</div>
                                                                <div class="line number44 index43 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number45 index44 alt2">
                                                                         </div>
                                                                <div class="line number46 index45 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        由于Enable和Disable是互斥的,所以对应有SetDisable、SetEnable 。其它非互斥状态 提供 AttachState、RemoveState用于附加或移除状态。 如出现新的状态在StatesFlags中添加,状态为位域枚举,使用连续的数字移位操作,增加代码可读性。</p>
<p>
        <span><strong>附扩展方式测试代码</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterplain" id="highlighter_76165">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                        <div class="line number20 index19 alt1">
                                                                20</div>
                                                        <div class="line number21 index20 alt2">
                                                                21</div>
                                                        <div class="line number22 index21 alt1">
                                                                22</div>
                                                        <div class="line number23 index22 alt2">
                                                                23</div>
                                                        <div class="line number24 index23 alt1">
                                                                24</div>
                                                        <div class="line number25 index24 alt2">
                                                                25</div>
                                                        <div class="line number26 index25 alt1">
                                                                26</div>
                                                        <div class="line number27 index26 alt2">
                                                                27</div>
                                                        <div class="line number28 index27 alt1">
                                                                28</div>
                                                        <div class="line number29 index28 alt2">
                                                                29</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="plain plain"></code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="plain spaces"> </code><code class="plain plain">public class StatesFlagsTest</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain"></code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="plain spaces">  </code><code class="plain plain">public void TestStatesExtends()</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">{</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//赋初值 在用、锁定、移除</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">var state = StatesFlags.Enabled | StatesFlags.Locked | StatesFlags.Removed;</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//调用SetDisable方法,设为停用</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">state = state.SetDisable();</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(!state.HasFlag(StatesFlags.Enabled));</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(state.HasFlag(StatesFlags.Disabled));</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//调用SetEnable方法,设为在用</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">state = state.SetEnable();</code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(state.HasFlag(StatesFlags.Enabled));</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(!state.HasFlag(StatesFlags.Disabled));</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//调用RemoveState方法,移除状态</code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">state = state.RemoveState(StatesFlags.Locked);</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));</code>
</div>
                                                                <div class="line number20 index19 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(state.HasFlag(StatesFlags.Removed));</code>
</div>
                                                                <div class="line number21 index20 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//调用AttachState方法,附加状态</code>
</div>
                                                                <div class="line number22 index21 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">state = state.AttachState(StatesFlags.Confirmed);</code>
</div>
                                                                <div class="line number23 index22 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(state.HasFlag(StatesFlags.Confirmed));</code>
</div>
                                                                <div class="line number24 index23 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">//直接调用方法,不赋值不能改变states的值</code>
</div>
                                                                <div class="line number25 index24 alt2">
                                                                        <code class="plain spaces">   </code><code class="plain plain">state.AttachState(StatesFlags.Locked);</code>
</div>
                                                                <div class="line number26 index25 alt1">
                                                                        <code class="plain spaces">   </code><code class="plain plain">Assert.IsTrue(!state.HasFlag(StatesFlags.Locked));</code>
</div>
                                                                <div class="line number27 index26 alt2">
                                                                         </div>
                                                                <div class="line number28 index27 alt1">
                                                                        <code class="plain spaces">  </code><code class="plain plain">}</code>
</div>
                                                                <div class="line number29 index28 alt2">
                                                                        <code class="plain spaces"> </code><code class="plain plain">}</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong>总结</strong></span></p>
<p>
        以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。</p>
<p>
        原文链接:http://www.cnblogs.com/WangHuaiSheng/p/7954074.html</p>
頁: [1]
查看完整版本: 你应该知道的States字段使用规范