Я использую описанный здесь типобезопасный шаблон перечисления. Мне нужно вложить одно типовое перечисление в другое. Дочернее свойство (статический объект) имеет значение 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 гарантирует, что это должно просто работать, но в моем случае это не работает. а>
Child
вParentEnum
не являетсяnull
. - person juharr   schedule 12.08.2015child
, поэтому я не могу понять, в чем проблема. - person Nyerguds   schedule 12.08.2015Main
, который мы могли бы запустить, и вам действительно нужно сократить его до только того, что вам нужно для демонстрации проблемы. - person Jon Skeet   schedule 12.08.2015SettingUnit
равно нулю. Вы также, кажется, говорите, чтоdefaultUnit
равно нулю, и в своем коде вы устанавливаетеSettingUnit = defalutUnit
. Таким образом,SettingUnit
равно нулю, потому что вы установили его равным нулю. Итак, либо вы спрашиваете, почему переменная, которую я установил в значение null, теперь равна нулю, что является нонсенсом, либо в вашем вопросе отсутствует что-то еще. - person shf301   schedule 12.08.2015defaultUnit
передается в конструктор. defaultUnit — это статический объект из дочернего безопасного перечисления. - person GisMofx   schedule 12.08.2015MyUnit
, похоже, не вызывается перед конструктором вMyDeviceSetting
Весь код есть. - person GisMofx   schedule 12.08.2015null
, и покажите эту строку кода. - person juharr   schedule 12.08.2015//UNIT SETTINGS
.MyUnit.mm
иMyUnit.inch
равны NULL. - person GisMofx   schedule 12.08.2015MyDeviceSetting
элементы инициализируются передMyUnit
элементами. - person GisMofx   schedule 12.08.2015