如何将保存为01010位的数据转换为类对象中的字段

本文关键字:对象 字段 转换 数据 保存 01010位 | 更新日期: 2023-09-27 18:14:12

我有两个包含真/假数据的变量。第一个变量可以为空,但第二个变量总是非空。两个变量的长度总是相同的。

var AnswerGridCorrect = "000111"; // or null
var AnswerGridResponses = "000011";

我怎么能把这个数据变成一个面向对象的形式。我已经创建了下面的类。以下是我需要的转换为JSON时的输出:

"answerswers":[        // Json conversion made Answers into answers
   {"correct":null,"response":true},
   {"correct":null,"response":true},
   {"correct":null,"response":true},
   {"correct":null,"response":false}
 }

请注意,我正在使用LINQ来输出数据,所以我认为我需要的是一个带有参数的函数,如下所示:

 .Select((t, index) => new  {
                Answer = t.Answer,
                Answers = makeAnswer(t.AnswerGridCorrect,
                                     t.AnswerGridResponses)
                });

我不确定这是否有帮助,但这里是我从JSON中执行此操作时使用的类:

public class AnswerRow
{
    public bool? Correct { get; set; }
    public bool Response { get; set; }
}
public class AnswerRowList
{
    public IList<AnswerRow> AnswerRows { get; set; }
}

如何将保存为01010位的数据转换为类对象中的字段

下面是makeAnswers方法的实现:

public List<AnswerRow> makeAnswers(string c, string r)
{
   var result = new List<AnswerRow>();
   for(var i=0; i<r.Length; i++)
   {
       result.Add(
        new AnswerRow { 
                 Correct = c!=null?new Nullable<bool>(c[i]=='1'):null,
                 Response = r[i]=='1'
        });
   }
   return result;
}    

Rene的答案可能是正确的,但这是Linq的(不必要的复杂)方式:

AnswerRowList MakeAnswer(string answerGridCorrect, string answerGridResponses)
{
    return new AnswerRowList()
    {
        AnswerRows = answerGridResponses.Zip(
            answerGridCorrect == null ?
                Enumerable.Repeat<bool?>(null, answerGridResponses.Length) :
                answerGridCorrect.Select(x => new Nullable<bool>(x == '1')),
            (r, c) => new AnswerRow()
            {
                Correct = c,
                Response = r == '1'
            }).ToList()
    };
}