![](/img/trans.png)
[英]C# How do I replace objects in one collection with Objects from another collection
[英]How can I create a collection with a sequential number as one field from another collection in C#
我有一个变量Answers,其中包含AnswerDetail对象的集合:
IEnumerable<AnswerDetail> Answers = ...
AnswerDetail类:
public class AnswerDetail
{
public int AnswerId { get; set; }
public string Text { get; set; }
public bool? Correct { get; set; }
public bool? Response { get; set; }
}
AnswerId对于应用程序是唯一的,但是我想更改它,以便它们是从1开始的连续数字。如何填充以下类,如何在源对象Answers
交换长数字并将数字1,2,3等等,而不是原始数字。 换句话说,我想在将它发送给客户端时完全丢失AnswerId号,而只发送简单的序列号。
public class AnswerDetailToClient
{
public int AnswerUId { get; set; }
public string Text { get; set; }
public bool? Correct { get; set; }
public bool? Response { get; set; }
}
您可以使用Func<TSource, int, TResult>
委托的Select
方法重载:
return Answers.Select((x,i) => { x.AnswerUID = i; return x; });
用i + 1
更改i
使其从1
开始,否则它将从0
开始。
但是,它也会修改您的Answers
收集项,因为它们是引用类型实例。 您可以在更改ID之前克隆对象,以防止出现以下情况:
return Answers.Select(x => x.Clone())
.Select((x,i) => { x.AnswerUID = i; return x; });
您必须实现Clone
方法才能使其工作。
这是我的简单解决方案。
var list = new List<AnswerDetailToClient>();
list.Add(new AnswerDetailToClient{AnswerUId = 100, Correct = true, Response = false, Text = "Bla bla"});
list.Add(new AnswerDetailToClient { AnswerUId = 111, Correct = true, Response = false, Text = "Bla bla" });
list.Add(new AnswerDetailToClient { AnswerUId = 222, Correct = true, Response = false, Text = "Bla bla" });
list.Add(new AnswerDetailToClient { AnswerUId = 333, Correct = true, Response = false, Text = "Bla bla" });
list.Add(new AnswerDetailToClient { AnswerUId = 444, Correct = true, Response = false, Text = "Bla bla" });
list.Add(new AnswerDetailToClient { AnswerUId = 555, Correct = true, Response = false, Text = "Bla bla" });
int i = 0;
var q = (from t in list
let x = ++i
select new
{
asnswerId= x,
correct = t.Correct,
response = t.Response,
text = t.Text
});
foreach (var l in q)
{
Console.WriteLine(l.asnswerId);
}
Console.Read();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.