处理需要自动值的值类型的最佳方式?
支持值类型的“自动”值的最佳方式是什么?处理需要自动值的值类型的最佳方式?
比方说,我想浮动纹理5个单位关闭屏幕的右侧。我想最终开发人员设置,像这样的值:
mytexture.Margin.Right = 5;
mytexture.Margin.Left = int.Auto;
在内部,我的“布局管理器”需要知道的定位的最终结果,但坚持认为这是一个自动的财产为未来的比较和使用。
到目前为止,我已经通过,处理在阳光下每一个可能的转换,但有一个额外的字段来声明它是否代表了一个自动设定值,或者不是一个新的值类型实现这一点。
这是正确的吗?或者有更好的方法来处理这个问题?我的代码目前最终结果为:
mytexture.Margin.Right = 5;
mytexture.Margin.Left = Size.Auto;
您还可以在WPF提供的GridLength类型之后建模。
他们基本上是由一个结构,具有双重价值(除其他事项外)。他们还说隐式转换运营商,所以很容易从代码中使用:
RowDefinition row = new RowDefinition();
row.Height = 25; //Same as new GridLength(25);
row.Height = GridLength.Auto;
我敢肯定,他们专门检查静态成员,GridLength.Auto引擎盖做工作之下。
实际上GridLength不提供隐式(或显式)转换,所以你的代码不能编译。但是,该模式很有用,可以根据自己的类型提供。 – Tergiver 2011-03-01 15:30:00
那么,我认为有一个类似的ASP.Net WebForms控件的宽度和高度的结构:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.unit.aspx它实际上有我想到的隐式操作符。 – jonathanpeppers 2011-03-01 15:54:52
这就是我一直在做的事情。 – Krisc 2011-03-07 11:56:48
这听起来非常相似向Nullable<T>
,在具有术语“任何价值,而且一个标记,一个值是否设置”。你可以要么使用Nullable<T>
直接,或者如果你觉得这是类型的虐待一点点,你可以写你自己的类似的类型,例如Defaultable<T>
。
你可以显示你的类型的代码?结构可以有构造函数,所以你可以在那里设置默认值。 – Oded 2011-03-01 12:20:58
@Oded - 我就是这么做的。我使用隐式转换来支持各种转换场景。 – Krisc 2011-03-07 11:57:27