我正在尝试将某些对象添加到另一个对象。但我在选项部分遇到错误。我只是想简单地将一些东西从一个物体中添加到另一个物体中。
这是我的代码看起来像..
var responses = new Responses();
form.Questions.ForEach(
q => responses.Questions.Add(new Models.Question()
{
QuestionId = Convert.ToInt32(q.Id),
Value = q.SingleAnswer,
Options = q.Options.ForEach( o => q.Options.Add(
new Option // <----FAILING HERE!!!!!!!!!!!!
{
OptionId = 1,
Value = "test"
}
))
})
);
错误是
Argument type 'Web.Models.Option' is not assignable to parameter type QuestionOptionViewModel
模型:
public class Responses
{
public List<Question> Questions { get; set; }
}
public class Question
{
public int QuestionId { get; set; }
public string Value { get; set; }
public List<Option> Options { get; set; }
}
public class Option
{
public int OptionId { get; set; }
public string Value { get; set; }
}
public class QuestionOptionViewModel
{
public int? Id { get; set; }
public string Text { get; set; }
public string QuestionType { get; set; }
[RequiredIf("QuestionType", "text", ErrorMessage = "Required Field")]
public string Value { get; set; }
[RequiredIf("QuestionType", "checkbox", ErrorMessage = "Required Field")]
public bool IsChecked { get; set; }
}
public class QuestionViewModel
{
public int? Id { get; set; }
public string QuestionType { get; set; }
public string SubType { get; set; }
public string Text { get; set; }
public int SortOrder { get; set; }
public bool IsHidden { get; set; }
[RequiredIf("QuestionType", "singleAnswer", ErrorMessage = "Reqired Field")]
public string SingleAnswer { get; set; }
[RequiredIf("QuestionType", "radio", ErrorMessage = "Radio Reqired")]
public int? SelectedRadio { get; set; }
[RequiredIf("QuestionType", "select", ErrorMessage = "Selection Reqired")]
public int? SelectedSelect { get; set; }
public bool CheckboxError { get; set; }
public List<QuestionOptionViewModel> Options { get; set; }
}
答案 0 :(得分:3)
希望这不是太误导,但我认为你这一切都错了。您想要执行Select
并将结果分配给回复中的questions属性。这是一个基本的例子;
var responses = new Responses();
responses.Questions = form.Questions.Select(
q => new Models.Question()
{
QuestionId = Convert.ToInt32(q.Id),
Value = q.SingleAnswer,
Options = q.Options.Select(o =>
new Option
{
OptionId = (int) o.Id,
Value = o.Value
}).ToList()
}).ToList();
我很快就编辑了你的代码,所以有一些潜力无法正常工作(没有编译或任何东西)。但基本上您使用Select
进行投影,返回List<Question>
并将其分配给Questions
属性。不要试图添加到位。除此之外,您从未初始化Questions
列表,因此即使编译该代码,您也会获得NullReferenceException
。同样,您的代码可能存在其他问题,但我认为当ForEach
实际上是正确的操作时,您会从根本上误用Select
。
答案 1 :(得分:1)
这里有两个问题。您正在尝试更改正在使用ForEach
进行迭代的集合。第二,你试图分配ForEach
的结果。相反,您应该使用Select
和ToList
来创建要分配给Options
的列表。如果你改变了
Options = q.Options.ForEach( o => q.Options.Add(
new Option
{
OptionId = 1,
Value = "test"
}
))
到
Options = q.Options.Select(
new Option
{
OptionId = 1,
Value = "test"
}
).ToList()
它应该有用