Вы перепутали определение и декларации. Определение вложенного класса не создает экземпляр. Также классы, которые вы определяете, выглядят так, как будто все они используют одни и те же свойства. Итак, вы должны определить один класс и объявить несколько экземпляров.
Вы можете исправить это:
C# 6,0
public class Info
{
public string tag { get; set; }
public string value { get; set; }
public string reference { get; set; }
}
public class StockChecklist
{
public Info qty1p1 { get; } = new Info { tag = "uniqueval23456", value = "", reference = "" };
public Info qty1p2 { get; } = new Info { tag = "uniqueval3736", value = "", reference = "" };
public Info qty2 { get; } = new Info { tag = "uniqueval97357", value = "", reference = "" };
public Info qty3p1 { get; } = new Info { tag = "uniqueval88356", value = "", reference = "" };
public Info qty3p2 { get; } = new Info { tag = "uniqueval62346", value = "", reference = "" };
public Info qty3p3 { get; } = new Info { tag = "uniqueval09876", value = "", reference = "" };
public Info qty3p4 { get; } = new Info { tag = "uniqueval62156", value = "", reference = "" };
public Info qty4 { get; } = new Info { tag = "uniqueval25326", value = "", reference = "" };
}
Pre C# 6.0 вы должны создать экземпляры в конструкторе.
public class StockChecklist
{
public StockChecklist()
{
qty1p1 = new Info { tag = "uniqueval23456", value = "", reference = "" };
qty1p2 = new Info { tag = "uniqueval3736", value = "", reference = "" };
qty2 = new Info { tag = "uniqueval97357", value = "", reference = "" };
qty3p1 = new Info { tag = "uniqueval88356", value = "", reference = "" };
qty3p2 = new Info { tag = "uniqueval62346", value = "", reference = "" };
qty3p3 = new Info { tag = "uniqueval09876", value = "", reference = "" };
qty3p4 = new Info { tag = "uniqueval62156", value = "", reference = "" };
qty4 = new Info { tag = "uniqueval25326", value = "", reference = "" };
}
public Info qty1p1 { get; private set; }
public Info qty1p2 { get; private set; }
public Info qty2 { get; private set; }
public Info qty3p1 { get; private set; }
public Info qty3p2 { get; private set; }
public Info qty3p3 { get; private set; }
public Info qty3p4 { get; private set; }
public Info qty4 { get; private set; }
}
Примечание: Как и некоторые комментарии уже отмечалось, объявляя 8 экземпляров одного и того же класса в классе может указывать на «плохой» дизайн. Вы можете создать для него Dictionary<>
.
Вот версия словаря: (бонус)
public class Info
{
public string tag { get; set; }
public string value { get; set; }
public string reference { get; set; }
}
public class StockChecklist
{
private Dictionary<string, Info> _infoDict = new Dictionary<string, Info>();
private void AddToDict(Info info)
{
_infoDict.Add(info.tag, info);
}
public StockChecklist2()
{
AddToDict(new Info { tag = "uniqueval23456", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval3736", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval97357", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval88356", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval62346", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval09876", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval62156", value = "", reference = "" });
AddToDict(new Info { tag = "uniqueval25326", value = "", reference = "" });
}
public bool TryGetByTag(string tag, out Info info)
{
return _infoDict.TryGetValue(tag, out info);
}
public Info this[string tag]
{
get
{
Info info;
if (!_infoDict.TryGetValue(tag, out info))
return null;
return info;
}
}
}
использовать его как: (C# 6,0)
StockChecklist stock = new StockChecklist();
Info info;
if (stock.TryGetByTag("uniqueval23456", out info))
{
Trace.WriteLine($"{info.tag} = {info.value}");
}
Или (C# 6.0)
Trace.WriteLine(stock["uniqueval88356"]?.value);
Это очень неясно * почему * у вас есть все эти загадочно-и-нетрадиционно названные вложенные классы. Можете ли вы дать больше контекста тому, чего вы пытаетесь достичь?Очень вероятно, что есть лучшее решение. Обратите внимание, что создание экземпляра внешнего класса делает * not * автоматически создавать экземпляр любых вложенных классов. –
Здесь вы можете найти ответ https://msdn.microsoft.com/en-us/library/ms173120.aspx –
Вы можете использовать класс Dictionary вместо создания 6 классов, которые имеют ту же цель, что и для хранения некоторых значений –