【发布时间】:2015-08-12 17:32:09
【问题描述】:
我正在使用此处列出的type-safe enum pattern。我需要将一个类型安全的枚举嵌套到另一个中。在创建父构造函数时,子属性(静态对象)为 NULL。似乎没有调用子构造函数并且我遇到了一些错误。(父子关系我很困惑,但它解释了层次结构)
这是一个例子(我使用的是 netMF):
public class MyDeviceSetting //parent
{
public readonly string Name;
public MyUnit SettingUnit;
public readonly MyUnit.UnitPurpose UnitPurpose;
#region MY STATIC SETTINGS
//UNIT SETTINGS
public static MyDeviceSetting TempUnits = new MyDeviceSetting("TempUnits", MyUnit.mm); //MyUnit.mm is null. Why?
public static MyDeviceSetting BLAH = new MyDeviceSetting("BLAH", MyUnit.inch);//MyUnit.inch is null. Why?
#endregion
/// <summary>
/// This is the MAIN PRIVATE Constructor
/// </summary>
/// <param name="?"></param>
private MyDeviceSetting(string name, MyUnit defaultUnit)
{
Name = name;
SettingUnit = defaultUnit;//NULL
UnitPurpose = SettingUnit.Purpose; //fails because SettingUnit is NULL
}
}
public sealed class MyUnit
{
private static int Count = 0;
//these are used to store and identify the unit in memory
public readonly int UnitID;
public readonly int TestID;
public enum UnitPurpose
{
DISTANCE,
SPEED,
TEMPERATURE,
TIME,
CLOCK,
NO_UNITS
}
public readonly string DisplayName;
public readonly string Abbreviation;
public readonly string Name;
public readonly UnitPurpose Purpose;
#region My Units
public static readonly MyUnit mm = new MyUnit("Milimeters", "mm", "mm", UnitPurpose.DISTANCE, 1);
public static readonly MyUnit inch = new MyUnit("inch", "inch", "in", UnitPurpose.DISTANCE, 2);
#endregion
private MyUnit(string name,
string displayName,
string abbreviation,
UnitPurpose unitPurpose,
int unitID)
{
Name = name;
DisplayName = displayName;
Abbreviation = abbreviation;
Purpose = unitPurpose;
UnitID = unitID;
TestID = Count;
Count++;
}
}
如何确保child 不为空?有解决办法吗?编辑:This Post 确保这应该可以正常工作,但在我的情况下它不起作用。
【问题讨论】:
-
您提供的代码无法编译,但在进行了编译所需的琐碎更改后,它可以正常工作。请提供一个简短但完整的示例来实际演示该问题。
-
@JuanK 成为Enum的目的
-
@GusMofx 我已经测试过您是上次更新的代码,但一切看起来都不错,您告诉我们的代码必须失败或导致 null... 工作正常。 :S
-
@GisMofx 有人将 null 传递给构造函数。我不知道为什么,因为您没有向我们展示该代码。
-
在这种情况下,这听起来可能是 netMF 的错误。您应该在问题中提及并为其添加标签。
标签: c# .net enums static .net-micro-framework