![](/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.