簡體   English   中英

如何在C#中創建一個具有序號的集合作為另一個集合中的一個字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM