繁体   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