C# 从XML随机分配给类属性
我有一个XML文件,我正在从中解析一些要显示在列表中的内容: 类别:C# 从XML随机分配给类属性,c#,C#,我有一个XML文件,我正在从中解析一些要显示在列表中的内容: 类别: 公共类SampleClass { 公共字符串样本{get;set;} 公共字符串限定{get;set;} 公共字符串随机{get;set;} } XML文件示例: 这是示例1 答复1 这是示例2 答复2 ... 目前,我正在轻松解析列表中的内容并制作此列表 \u list=xmlDoc.substands(“问题”) .选择( q=>新的SampleClass { 样本=q元素(“样本”)值, 确定=q元素(“确定”)
公共类SampleClass
{
公共字符串样本{get;set;}
公共字符串限定{get;set;}
公共字符串随机{get;set;}
}
XML文件示例:
这是示例1
答复1
这是示例2
答复2
...
目前,我正在轻松解析列表中的内容并制作此列表
\u list=xmlDoc.substands(“问题”)
.选择(
q=>新的SampleClass
{
样本=q元素(“样本”)值,
确定=q元素(“确定”)值
})
.ToList();
但是,在列表中,我希望包含另一个元素,该元素将以随机顺序从XML文件中解析,例如:
SampleClass list Sample Definite Random
^ ^ ^
List element 1: This is sample 1, Answer 1, Answer5
List element 2: This is sample 2, Answer 2, Answer1
List element 3: This is sample 3, Answer 3, Answer4 ...
我想问一下,在解析时如何将这个Random
元素包括在列表中,以便q.Random
从Question
节点分配一个随机值
列表中的随机项重复项是不可接受的。这应该是您要查找的:
var rnd = new Random(); //make this a static field, if needed
var questions = xmlDoc.Descendants("Question").ToList();
_list = _questions.Select(q => new SampleClass
{
Sample = q.Element("Sample").Value,
Definite = q.Element("Definite").Value,
Random = questions[rnd.Next(questions.Count)].Element("Definite").Value
}).ToList();
(来自)
请注意,这将允许重复的随机答案,例如答案1可能是2和3的随机答案,并且不会阻止答案本身成为随机答案。如果这些是问题,您需要使用不同的解决方案(可能是其变体)。这应该是您需要的:
var rnd = new Random(); //make this a static field, if needed
var questions = xmlDoc.Descendants("Question").ToList();
_list = _questions.Select(q => new SampleClass
{
Sample = q.Element("Sample").Value,
Definite = q.Element("Definite").Value,
Random = questions[rnd.Next(questions.Count)].Element("Definite").Value
}).ToList();
(来自)
请注意,这将允许重复的随机答案,例如答案1可能是2和3的随机答案,并且不会阻止答案本身成为随机答案。如果这些是问题,您需要使用不同的解决方案(可能是其变体)。分两次完成。第一个过程可以与您已有的过程相同。第二次通过将为列表中的每个项目分配一个随机答案
这是我脑子里想不到的,所以请原谅任何错误,但它看起来会如下所示:
IList<string> randomAnswers = _list
.Select(c => c.Definite)
.OrderBy(c => Guid.NewGuid())
.ToList();
for (int index = 0; index < randomAnswers.Length; index++)
{
_list[index].Random = randomAnswers[index];
}
IList randomAnswers=\u列表
.选择(c=>c.Definite)
.OrderBy(c=>Guid.NewGuid())
.ToList();
for(int index=0;index
分两次完成。第一个过程可以与您已有的过程相同。第二次通过将为列表中的每个项目分配一个随机答案
这是我脑子里想不到的,所以请原谅任何错误,但它看起来会如下所示:
IList<string> randomAnswers = _list
.Select(c => c.Definite)
.OrderBy(c => Guid.NewGuid())
.ToList();
for (int index = 0; index < randomAnswers.Length; index++)
{
_list[index].Random = randomAnswers[index];
}
IList randomAnswers=\u列表
.选择(c=>c.Definite)
.OrderBy(c=>Guid.NewGuid())
.ToList();
for(int index=0;index
这将生成一个不重复的随机答案列表。这可能是也可能不是OP想要的。这意味着每个项目不是独立随机的,因为例如,如果有5个答案,前4个在随机点中有2-5个,你可以猜测最后一个是1。这将生成一个不重复的随机答案列表。这可能是也可能不是OP想要的。这意味着每个项目不是独立随机的,因为例如,如果有5个答案,前4个在随机点中有2-5个,你可以猜测最后一个是1。这不允许重复的“随机”答案吗?是的,它会。询问者从未指明他是否想要这个。我会注意到。@Tim S。在这种方法中,列表元素中有重复的Random
元素。这是个问题吗?你在你的问题中没有这样说-如果你编辑你的问题来解决我在回答中提到的两件事,那将是一件好事:复制品是否可以接受,自我引用是否可以接受。否则我们就在黑暗中拍摄来回答你。这不允许重复的“随机”答案吗?是的,会的。询问者从未指明他是否想要这个。我会注意到。@Tim S。在这种方法中,列表元素中有重复的Random
元素。这是个问题吗?你在你的问题中没有这样说-如果你编辑你的问题来解决我在回答中提到的两件事,那将是一件好事:复制品是否可以接受,自我引用是否可以接受。否则我们就在黑暗中开枪试图回答你。