1

我有 4 个 bool 类型的字段:

private bool f1;
public bool F1 {
get{return this.f1;}
set
 {
 this.f1=value;
 onPropertyChanged("F1");
 }
}

private bool f2;
public bool F2 {
get{return this.f2;}
set
 {
  this.f2=value;
  onPropertyChanged("F2");
 }
}
private bool f3;
public bool F3 {
get{return this.f3;}
set
 {
 this.f3=value;
 onPropertyChanged("F3");
 }
}
private bool f4;
public bool F4 {
get{return this.f4;}
set
 {
  this.f4=value;
  onPropertyChanged("F4");
 }
}

其中只有一个可能是真的。我想要一种将它们设置在 for 循环中的方法。我尝试了以下方法:

bool[] myFields =
{
    F1,F2,F3,F4
};

int Answer = 1; 
for (int index = 0; index < myFields.Length; index++)
{
    if(index == Answer)
    {
        myFields[index] = true;
    }
    else
    {
        myFields[index] = false;
    }
}

但这只会将 myFields 数组中的值设置为真/假,而不是属性 F2 本身。关于如何使它更好/工作的任何想法?

4

2 回答 2

4

使用enum. 这样,您可以允许值 F1、F2、F3、F4(和“无”,如果适用)。这就是它的样子:

public enum FValue { None, F1, F2, F3, F4 }

public class Foo
{
    public FValue Value { get; set; }
}
于 2012-12-05T20:15:03.753 回答
4

我想你不想要这里的自动属性。这个怎么样:

public bool F1 {
    get { return myFields[0]; }
    set { myFields[0] = value; }
}
etc... 

?

顺便说一句,您的for循环可以简化为:

for (int index = 0; index < myFields.Length; index++) {
     myFields[index] = (index == Answer);
}
于 2012-12-05T20:01:52.993 回答