根据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; }
}
有没有更好的方法来设置标志而不是迭代计数器?
答案 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;
}
}
}