好的,我要说的第一件事就是我不是要求任何人走出他们的路,并且实际上写了一个有效的版本。除非有人非常棒,并认为这不是太多的工作。我通过为自己设定一个崇高的目标,并逐步努力,以此来学习,这就是它的本质。我真诚地感谢你们/ gals可以提供的任何指导或参考。我应该只从List继承一个类,但不知道该怎么做?
根据以下要求(如果您认为我应该采取不同的方式,请在此处纠正我),这是我订购的待办事项列表:
我正在尝试设计以下内容(我知道下面有一些重叠,对不起。我希望它有意义!):
具有以下要求的Dynamic_List_Of_Hetero_Type_Lists对象(如Class,Abstract,Struct,Interface ...)(对于长名称抱歉)
创建可以容纳的SuperList(Tuple,ArrayList或类似名称) 不同类型的ChildLists(IList,Tuple或类似)
如果我需要限制功能(比如可能通过隐藏/多态/等等控制列表的Add方法),我希望能够选择编写覆盖C#默认列表方法的方法(所以我不需要编写每个正常的C#方法,除非我想改变它。这是我在样板文件中的意思的一部分。)
能够巧妙地将非集合类型添加到正确的ChildList
类似于“AddItemsByType”方法,它接受一个非收集的输入,获取输入的inputTypes,If(每个inputType匹配任何ChildList的类型){//将每个输入添加到具有匹配inputType的ChildList } Else {// Throw Exception}
一个在X SuperList索引处返回ChildList类型的方法(我知道静态类型和运行时类型之间可能存在差异。我还没有太多考虑解决这个问题。我从另一篇SO帖子中可以看出,“出于调试目的,请务必在方法中添加[条件(”DEBUG“)],因为以这种方式使用变量会以微妙的方式改变代码的性质。”)(我猜这将至少在上面的步骤中部分重用“巧妙添加...”。)
SuperList有效要求(我不会挑剔是通过方法满足要求还是以其他方式定义列表的约束):
SuperList在没有硬编码的ChildList类型的情况下启动
SuperList父级只能拥有每种类型的一个ChildList(例如“不能保存两个List,但可以保存List和List”。)
示例:如果SuperList已在任何索引中包含ChildList,则无法在另一个索引处创建/添加另一个ChildList。 (可以保存每种类型的一个列表)
问题:有哪些类型不起作用?
示例(下面的代码可以在一个代码块中运行。这个例子并不是为了指示对象的引用方式。我在这台机器上没有Visual Studio,下面的代码是我能做到的最好的代码do,所以请考虑伪代码。):
List<string> Nutrients = new List<string>();
List<int> ServingAmts = new List< int >();
Dynamic_List_Of_Hetero_Type_Lists FoodNutritionFacts = new Dynamic_List_Of_Hetero_Type_Lists(Nutrients);
FoodNutritionFacts.Add(ServingAmts);
// Writes “Added new element” (to show that List.Add was overridden)
string Nutrient = “Sodium”;
int ServingAmt = 15;
FoodNutritionFacts.AddItemsByType(ServingAmt , Nutrient); // Intentionally sent backwards
Console.WriteLine(FoodNutritionFacts[0][0]);
// Writes “Sodium”
List<string> FoodItems = new List<string>();
List<double> NetWeights = new List<double>();
Dynamic_List_Of_Hetero_Type_Lists GroceryItems = new Dynamic_List_Of_Hetero_Type_Lists(FoodItems);
GroceryItems.Add(NetWeights);
// Writes “Added new element” (to show that List.Add was overridden)
string FoodItem = “Kool-Aid Packet”;
double NetWeight =3.6;
GroceryItems.AddItemsByType(Nutrient , ServingAmt);
If(GroceryItems[0].Count > 0 && FoodNutritionFacts[1].Count > 0)
{
Console.WriteLine(“This is just to show they still exist separately.”)
}
// Writes “This is just to show they still exist separately.”
GroceryItems[1][0].GetType(); // Are there better ways to do this?
// Returns that the type is double
List<double> ItemHeight = new List<double>();
GroceryItems.Add(ItemHeight);
// Writes (for illustration purposes) “You can’t add another ChildList with type double. If you want to add a list of items into an existing ChildList, you can use AddRange” (or something better than AddRange?)
我的背景:我用Java编程每周10-20小时,一年多一点,并在大约2年前每隔一周退休几个小时。在过去的两年里,我一直在每周5-10小时编写一些宏观的东西,但从来没有深入研究过。现在我正在努力提高我的C#技能,因为我计划很快申请开发人员工作。