我的应用程序的前端是DataGrid
,其内容被传递到Excel生成方法。
问题在于DataGrid处理13列:其中10列是固定的(即传递给Excel),而最后3列中的每一个都是可选的。
public class GridModel
{
public string Item { get; set; }
public string ItemName { get; set; }
public double TotalHeight { get; set; }
public double AGLheight { get; set; }
public double Embedment { get; set; }
public string Shape { get; set; }
public double TipDiameter { get; set; }
public double BaseDiameter { get; set; }
public double Taper { get; set; }
public double ShearReaction { get; set; }
// The following are optional, in 8 combinations, from all present to all absent
public double Camber { get; set; }
public double Rake { get; set; }
public double Angle { get; set; }
}
作为C#新手,我正在考虑不同的方法。
你们将如何处理?想到的最简单的想法是在模型中添加3个标志:
bool IsColumn1Present;
bool IsColumn2Present;
bool IsColumn3Present;
另一种方法是在层次结构中添加一个级别,因此每个“特殊”列均包含其自己的嵌入式标志:
if (Camber.flag) add(Camber.value);
就是说,我希望能够以某种方式删除这3个属性,因此任何访问它们的尝试都将导致错误或不可能。
如果存在这种情况,我想它将被称为“变体属性”。
TIA
注意:我已经通过在GUI级别上操作
Visibility.Visible
字段解决了此问题。但是,古鲁斯告诉我们,这是一个坏主意。最佳实践表明,此工具应成为模型的一部分。 最佳答案
您可以使用可为空的属性:
public double? Camber { get; set; }
然后在业务逻辑中检查它们的值:
if (thing.Camber.HasValue)
{
DoSomething(thing.Camber.Value);
}
鉴于您对“变体”属性的评论,听起来这可能正是您所追求的。
更多信息:http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
更新:如果您需要在应用程序范围内关闭它们(根据您的评论),则可以避免在不需要时首先将其设置为值(就我而言,这是更好的选择) ,业务逻辑,并且不属于您的哑模型类)或使用自定义访问器对其进行扩展:
private double? _camber;
public double? Camber
{
get
{
return ModelSettings.CamberEnabled
? _camber
: null;
}
set;
}
然后在某处具有一些静态/常量属性:
public static class ModelSettings
{
public const bool CamberEnabled = true;
}