如何创建一个具有具有多个相关属性的属性的对象,这些属性具有多个相关属性等等?
我正在创建一个 C# 类,该类将描述各种老虎殖民地的脚趾疾病。
一个殖民地有很多老虎。 1只老虎有4只爪子。 1只爪子有5个脚趾。每个脚趾都被"感染"或"未感染"。
如何构造一个对象来检索殖民地 4 的老虎的患病状态,名为 Eddy 的右前爪的第二个脚趾? 例如
Tiger t = new Tiger;
string toeStatus = t.colony(4).tiger("Eddy").paw("front-right").toe(2)
我只需要创建具有自身属性的对象,而不是具有与属性相关的属性相关的属性。
我还想重用这个对象来获取给定殖民地所有老虎的所有名称......
string allTigersNames = t.colony(4).tiger(*)
//Eddy, Glennis, Barry, Toby, Punter
我在类似的帖子中问过,并得到了以我目前的经验水平不理解的回答。特别是使用强类型属性的方法。
public class Colony
{
public int ColonyId {get; set;}
public string ColonyName {get; set;}
public List<Tiger> Tigers {get; set;}
}
public class Tiger
{
public int TigerId {get; set;}
public string TigerName {get; set;}
public Colony Colony {get; set;}
public List<Paw> Paws {get; set;}
}
public class Paw
{
public int PawId {get; set;}
public string PawDescription {get; set;}
public Tiger Tiger {get; set;}
public List<Toe> Toes {get; set;}
}
public class Toe
{
public int ToeId {get; set;}
public Paw Paw {get; set;}
public int ToeFinger {get; set;}
}
如果你问我,这将是我的层次结构
Colony > Multiple Tigers
Tiger > Multiple Paws
Paw > Multiple Toes
然后添加将如下所示
var primaryColony = new Colony
{
ColonyId = 1,
ColonyName = "First Colony",
Tigers = new List<Tigers>();
};
var colonies = new List<Colonies>();
//adding primary colony
colonies.Add(primaryColony);
//adding tiger to primary colony via name or you could use ColonyId == 1
colonies.First(c => c.ColonyName == "First Colony")
.Tigers.Add(new Tiger
{
TigerId = 1,
TigerName = "Eddy",
Paws = new List<Paw>();,
Colony = primaryColony
});
//adding paws to tiger named eddy in colony named primary colony
colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.Add(new Paw
{
PawId = 1,
PawDescription = "right-front",
Toes = new List<Toes>();,
Tiger = colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
});
//adding toes to right front paw of tiger named eddy in colony named first colony
colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.First(q => q.PawDescription == "right-front")
.First().Toes.Add(new Toe
{
ToeId = 1,
ToeFinger = 1,
Paw = colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.First(q => q.PawDescription == "right-front")
});
或者如果你有一个过滤器,比如你想把爪子添加到老虎名字=涡流
var tigerEddy = colonies.Select(y => new Tiger
{
TigerId = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.TigerId),
TigerName = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.TigerName),
Colony = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.Colony)
Paws = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.Paws)
}.Any(x => x.Tigers.Containes("Eddy").FirstOrDefault();
tigerEddy.Paws.Add(new Paws.....);
然后将其传回殖民地,并以TigerId
为参考