检查三个标志的所有可能组合的最有效逻辑是什么?



我有三个标志,可以是True或False。我需要显示每个可能的旗帜组合的图标。因为有三个标志,这意味着,组合起来,有八种可能的状态。(如下所示,其中粗体表示true。)

A B C

A B C

A B C

A B C

A C

A B C

A B C

A B C

是否有一个有利的控制流用于检查标志以减少不必要的检查?(这是否会因可能打开或关闭的标志而有所不同?)


编辑:

例如,当我查看标记A和B时,我的控制流是-

if(A & B) 
{
    // Display icon for A+B 
}
else if (A) 
{
    // Display icon for A 
} 
else if (B)
{
    // Display icon for B 
} 

我会设置一个8位的变量,允许第2,1,0位存储你的旗帜状态。

然后

switch(variablename)
{
  case 0:
  break;
  ..
  ..
  case 7:
  break;
}    
protected void grdDemo_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (!(e.Item is GridDataItem) || (e.Item.DataItem == null))
    {
        return;
    }
    ///////////////////
    //// Solution 1 ///
    ///////////////////
    // If it is possible to manipulate image name
    MyClass M1 = e.Item.DataItem as MyClass;
    ImageButton imgStatus = (ImageButton)e.Item.FindControl("imgStatus");
    StringBuilder sb = new StringBuilder();
    sb.Append(M1.A ? "1" : "0");
    sb.Append(M1.B ? "1" : "0");
    sb.Append(M1.C ? "1" : "0");
    string ImageName = "imgStaus" + sb.ToString() + ".jpg";
    imgStatus.ImageUrl = "~/path/" + ImageName;

    ///////////////////
    //// Solution 2 ///
    ///////////////////
    ImageName = string.Empty;
    double FlagCount = 0;
    FlagCount += Math.Pow((M1.A ? 0 : 1) * 2, 3);
    FlagCount += Math.Pow((M1.B ? 0 : 1) * 2, 2);
    FlagCount += Math.Pow((M1.B ? 0 : 1) * 2, 1);
    var intFlagCount = (int)FlagCount;
    switch (intFlagCount)
    {
        case 0:
            ImageName = "imgStausFFF.jpg";
            break;
        case 1:
            ImageName = "imgStausFFT.jpg";
            break;
        case 2:
            ImageName = "imgStausFTF.jpg";
            break;
        case 3:
            ImageName = "imgStausFTT.jpg";
            break;
        case 4:
            ImageName = "imgStausTFF.jpg";
            break;
        case 5:
            ImageName = "imgStausTFT.jpg";
            break;
        case 6:
            ImageName = "imgStausTTF.jpg";
            break;
        case 7:
            ImageName = "imgStausTTT.jpg";
            break;
    }
    imgStatus.ImageUrl = "~/path/" + ImageName;
    //////DONE!!!!!!!!!!
}
class MyClass
{
    public bool A { get; set; }
    public bool B { get; set; }
    public bool C { get; set; }
}

相关内容

  • 没有找到相关文章

最新更新