C# 如何将01010位的数据转换为类对象中的字段?
我有两个包含真/假数据的变量。第一个变量可以为null,但第二个变量始终为非null。两个变量的长度始终相同C# 如何将01010位的数据转换为类对象中的字段?,c#,C#,我有两个包含真/假数据的变量。第一个变量可以为null,但第二个变量始终为非null。两个变量的长度始终相同 var AnswerGridCorrect = "000111"; // or null var AnswerGridResponses = "000011"; 如何将这些数据更改为面向对象的形式。我已经创建了类,如下所示。以下是转换为JSON时我需要输出的样子: "answers":[ // Json conversion made Answers into answe
var AnswerGridCorrect = "000111"; // or null
var AnswerGridResponses = "000011";
如何将这些数据更改为面向对象的形式。我已经创建了类,如下所示。以下是转换为JSON时我需要输出的样子:
"answers":[ // 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; }
}
public class AnswerRow
{
公共bool?正确{get;set;}
公共bool响应{get;set;}
}
公共类应答器行列表
{
公共IList应答行{get;set;}
}
以下是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;
}
公共列表生成答案(字符串c、字符串r)
{
var result=新列表();
对于(var i=0;iRene的答案可能是正确的,但以下是(不必要的复杂)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()
};
}
AnswerRowList MakeAnswer(字符串answerGridCorrect,字符串answerGridResponses)
{
返回新的应答列表()
{
AnswerRows=answerGridResponses.Zip(
answerGridCorrect==null?
可枚举.重复(null,answerGridResponses.Length):
answerGridCorrect.Select(x=>newnullable(x=='1')),
(r,c)=>新的回答行()
{
正确=c,
响应=r==“1”
})托利斯先生()
};
}
为什么正确为null而不是true/false?假设输入了correct=“011”
和responses=“001”
,则需要输出:{false,false},{false,true},{true,true}as IEnumerable
?@rene-感谢您的宝贵意见。我应该指出,如果问题尚未标记,则answerGridCorrect将为空。但是answerGridResponses将始终具有一个值,因为如果尚未回答,则假设回答都为假。@Dialogicus-我有AnswerRow和AnswerRowList类这是我创建的。我希望将输出作为AnswerRowList的一个实例。我认为这可能会使它更容易。我现在正在检查此内容。谢谢。当我确定一切正常时,我将更新此帖子。