如何在属性属性上使用条件语句IF ELSE

YD4*_*YD4 0 c# attributes properties conditional-operator winforms

我想显示MyProperty1MyProperty2基于MyPropertySelected.如何使用条件语句ifelse基于MyPropertySelected?谢谢.

// [Browsable(true)
// ????? conditional statement IF ELSE in here..
// IF (MyPropertySelected) MyProperty1 will be show ELSE MyProperty2 will be show.
public bool MyPropertySelected { get; set; }

// [Browsable(true) or [Browsable(false) depending on MyPropertySelected condition.
public int MyProperty1 { get; set; }

// [Browsable(true) or [Browsable(false) depending on MyPropertySelected condition.
public int MyProperty2 { get; set; }
Run Code Online (Sandbox Code Playgroud)

Mat*_*zer 5

你把苹果与橘子混淆了.

属性是元数据,属性在运行时获取其值.

换句话说:属性是你可以使用反射访问的东西,它们不是绑定到特定对象而是绑定到对象的类型(即).

另一个问题是您希望根据在编译时无法工作的条件向属性添加属性.

MyPropertySelected直到它包围类实例化得到不会得到任何价值-那就是创建一个对象,例如:MyClass a = new MyClass()- ,这意味着添加或不添加属性将永远是一个编译时的选择.

我想明确一点:你不能做你想要纯粹使用属性的东西!

您无法根据运行时值有条件地应用属性.

最后,我怀疑你想Browsable根据条件制作一些东西,就像你自己的问题所说的那样.你不能这样做.

好的,但是......?

您可以使用不同的软件设计解决您的问题.

1)

首先,创建一个具有任何可浏览属性的接口.但是不要将该属性[Browsable(bool)]应用于接口属性.

2)

创建两个实现先前创建的接口的类.

在第一个类中,实现接口属性并[Browsable(true)]在其上放置属性.在第二节课中,做同样的事情,但这次放在[Browsable(false)]他们身上.

3)

创建对象实例的一些代码将决定将实例化哪一个.

也就是说,MyPropertySelected在两个类之外进行外部化并在调用者中执行整个条件切换.

public interface IBrowsableProperties
{
   int Property1 { get;set; }
   int Property2 { get;set; }
}

public class A : IBrowsableProperties
{ 
   [Browsable(true)]
   public int Property1 { get;set; }

   [Browsable(true)]
   public int Property1 { get;set; }
}

public class B : IBrowsableProperties
{
   [Browsable(false)]
   public int Property1 { get;set; }

   [Browsable(false)]
   public int Property1 { get;set; }
}

// Somewhere in some method...
bool propertySelected = true;

IBrowsableProperties instance = null;

if(propertySelected) 
{
   instance = new A();
}
else
{
   instance = new B();
}

// ... do stuff with your instance of IBrowsableProperties!
Run Code Online (Sandbox Code Playgroud)

UPDATE

我已经回顾了你的一些问题的评论,我发现你正在使用PropertyGrid控制.

无论如何,您可以在您的案例中应用这个概念.PropertyGrid可以继承.您可以创建PropertyGrid1PropertyGrid2派生类都实现所提出的界面!