C#中根据腿数属性值循环向列表添加对应数量元素的实现方法
解决根据腿数动态添加对应元素到列表的问题
这事儿其实很好搞定!你现在的核心问题是没法把循环索引和对应的leg参数关联起来,咱们换个思路——先把所有传入的leg参数打包到一个临时集合里,再根据NumberOfLegs的值取前N个元素就行,不管用LINQ还是循环都能轻松实现。
方案一:用LINQ的Take方法(简洁版)
这种写法最清爽,一行代码就能完成截取:
private List<T> ReturnListOfTypes<T>(T leg1, T leg2, T leg3, T leg4, T leg5, T leg6) { // 先把所有leg参数打包成数组 var allLegs = new[] { leg1, leg2, leg3, leg4, leg5, leg6 }; // 先校验腿数的合法性,避免传入无效值导致错误 if (NumberOfLegs < 1 || NumberOfLegs > 6) { throw new ArgumentOutOfRangeException(nameof(NumberOfLegs), "腿数必须在1到6之间"); } // 取前NumberOfLegs个元素转成列表返回 return allLegs.Take(NumberOfLegs).ToList(); }
方案二:用循环实现(更直观)
如果你不想用LINQ,也可以用循环逐个添加,核心还是先把参数放进数组,利用索引对应关系:
private List<T> ReturnListOfTypes<T>(T leg1, T leg2, T leg3, T leg4, T leg5, T leg6) { List<T> legs = new List<T>(); var allLegs = new[] { leg1, leg2, leg3, leg4, leg5, leg6 }; // 合法性校验不能少 if (NumberOfLegs < 1 || NumberOfLegs > 6) { throw new ArgumentOutOfRangeException(nameof(NumberOfLegs), "腿数必须在1到6之间"); } // 循环次数等于腿数,按索引取对应元素添加 for (int i = 0; i < NumberOfLegs; i++) { legs.Add(allLegs[i]); } return legs; }
为什么原来的写法不行?
你之前的循环里没有把i和对应的leg1/leg2等参数绑定,直接在循环外全加了,所以不管腿数是多少都会添加6个元素。把参数放进数组后,i就对应数组的索引,自然就能精准取到第i+1个leg参数啦。
内容的提问来源于stack exchange,提问作者Jimmy293288
相关产品推荐
相关产品推荐

