如何在没有迭代的情况下基于int计数器设置多个bool标志?

时间:2010-12-09 17:19:59

标签: c#

根据boolean计数器属性设置int属性的最佳方法是什么?

所以,假设我有10个布尔属性

public bool IsBool1 {get;set;}
....
public bool IsBool10 {get;set;}

和一个int计数器(永远不会有大于10的值)

public int Counter {get;set;}

最后,我有一个设置标志的方法

private void SetFlagsByCounter(int counter)
{
  if (counter >= 1) { IsBool1 = true; }
  .....
  if (counter >= 10) { IsBool10 = true; }
}

有没有更好的方法来设置标志而不是迭代计数器?

3 个答案:

答案 0 :(得分:5)

你真的需要拥有10个自动属性吗?你有10个属性只能根据计数器返回一个值吗? (你首先需要10个房产吗?)

例如:

public class Foo
{
    public int Counter { get; set; }

    public bool IsBool1 { get { return Counter >= 1; } }
    public bool IsBool2 { get { return Counter >= 2; } }
    public bool IsBool3 { get { return Counter >= 3; } }
    public bool IsBool4 { get { return Counter >= 4; } }
    ...
}

请注意,这与原作有三种不同之处:

  • 没有SetFlagsByCounter方法,只有属性
  • 在原文中,如果您调用SetFlagsByCounter(10)然后调用SetFlagsByCounter(1),那么IsBool5(等)仍会返回true,因为您从未清除过这些标记。
  • 在原文中,SetFlagsByCounter根本没有使用(或更改)Counter属性,在显示的代码中。

如果您可以提供更多背景信息,那么帮助您会更容易。

答案 1 :(得分:1)

你能使用布尔值的属性吗?

public bool IsBool1
{
    get
    {
        return counter >= 1;
    }
}

public bool IsBool2
{
    get
    {
        return counter >= 2;
    }
}

答案 2 :(得分:0)

如果您仍需要10个bool属性和SetFlagsByCounter方法,那么执行此操作的方法是将bool的内部数组定义为支持值对于属性,像这样:

class MyClass
{
    bool flags[] = new flags[10];

    public bool IsBool1 { get { return flags[0]; } set { flags[0] = value; } }
    public bool IsBool2 { get { return flags[1]; } set { flags[1] = value; } }
    ...
    public bool IsBool10 { get { return flags[9]; } set { flags[9] = value; } }

    public void SetFlagsByCounter(int counter)
    {
        for (int i = 0; i < counter; i++)
        {
            flags[i] = true;
        }
    }
}