我建立了一个清单:
int TOTAL = 10;
List<MyObject> myList = myOtherList.Select
(s => new MyObject
{
Prop1 = s.prop1
})
.ToList<MyObject>();
这里myList
有M个元素(M = myList.Count())
我需要将N
元素附加到myList,以便myList
具有TOTAL元素,换句话说N+M = TOTAL
。
我怎样才能完成它?
答案 0 :(得分:2)
只需不断添加新商品,直至达到所需尺寸:
while (myList.Count < TOTAL)
{
myList.Add(NewItem);
}
答案 1 :(得分:2)
LINQ方法:
myList.AddRange(Enumerable.Range(0, TOTAL - myList.Count).Select(i => myList2[i]));
请记住检查myList.Count
是否小于TOTAL,myList2
是否有足够的元素。
答案 2 :(得分:1)
这将从myOtherList
获取“n”个元素并将其添加到myList
。
myList.AddRange(myOtherList.Select(s => new MyObject { Prop1 = s.prop1 }).Take(n));
关于Take
的好处是,如果myOtherList
中没有足够的元素,它就不会导致错误 - 它只会获取所有元素。
如果 count 超过 source 中的元素数量,则会返回 source 的所有元素。
如果 count 小于或等于零,则不会枚举 source 并返回空的IEnumerable。
答案 3 :(得分:1)
这里有一个完整的例子,说明如何通过一行代码实现这一目标
list.AddRange(list2.Take(total - list.Count));
完整示例
internal class Program
{
private static void Main(string[] args)
{
List<MyObject> list = new List<MyObject>();
for (int i = 0; i < 5; i++)
{
list.Add(new MyObject() {Id = i}
);
}
List<MyObject> list2 = new List<MyObject>();
for (int i = 0; i < 5; i++)
{
list2.Add(new MyObject() {Id = i});
}
int total = 10;
list.AddRange(list2.Take(total - list.Count));
}
class MyObject
{
public int Id { get; set; }
}
}
答案 4 :(得分:0)
您可以在参数中使用myList.AddRange()和限制列表,或者在ForEach Linq中使用myList.Add()。
int TOTAL = 10;
List<MyObject> myList = something;
if (myList < TOTAL)
{
myOtherList.Select
(s => new MyObject
{
Prop1 = s.prop1
})
.ToList<MyObject>()
.Take(TOTAL - myList.Count)
.ForEach(ob => myList.Add(ob));
}
或
int TOTAL = 10;
List<MyObject> myList = something;
if (myList < TOTAL)
{
myList.AddRange(myOtherList.Select
(s => new MyObject
{
Prop1 = s.prop1
})
.ToList<MyObject>()
.Take(TOTAL - myList.Count));
}
答案 5 :(得分:0)
怎么样:
public static IEnumerable<T> ConcatN<T>(this IEnumerable<T> source, IEnumerable<T> source2, int maxSize)
{
if (maxSize == 0)
throw new ArgumentException(
"maxSize cannot be zero", "maxSize");
var sourceCount = source.Count();
if (sourceCount > maxSize)
throw new ArgumentException(
"source has more elements than the given maxSize");
if (sourceCount + source2.Count() < maxSize)
throw new ArgumentOutOfRangeException(
"source and source2 has combined, more elements than the given maxSize");
return source.Concat(source2.Take(maxSize - sourceCount));
}
- 如果
source
中的项目数超过给定的maxSize
,则会引发异常。- 如果
source
+source2
中的项目数量少于给定的maxSize
,则会引发异常。
用法:
var number1 = Enumerable.Range(0, 10);
var number2 = Enumerable.Range(100, 10);
var number12 = number1.ConcatN(number2, 15);
Console.WriteLine("Length = {0} | Sum = {1}",
number12.Count(), number12.Sum());
// Output: "Length = 15 | Sum = 555"
答案 6 :(得分:-1)
尝试
myList.AddRange()
这用于将列表添加到现有列表中。 (它适用于任何与现有列表相同类型的IEnumerable。)
标记下来......哦,我没有意识到我们必须为人们编写完整的解决方案,而且我认为当我可以使用堆栈溢出而不是我的大脑时,我花了10年时间学习软件开发是明智的/ p>