我进行了很多搜索,我知道这个问题已被问过很多次,但是找不到适合我问题的解决方案。
我有一个具有以下结构的课程
namespace Website.Models
{
public class DynamicControlModel
{
}
public class QuestionnairModel
{
public long QuestionId { get; set; }
public string Question { get; set; }
public List<QuestionnairOptionModel> QuestionnairOption { get; set; }
}
public class QuestionnairOptionModel
{
public long OptionId { get; set; }
public string OptionString { get; set; }
public bool OptionControl1 { get; set; }
public string OptionControl2 { get; set; }
}
}
我尝试这样做:
public ActionResult ProcessRequest(List<QuestionnairModel> model)
{
List<QuestionnairModel> result = new List<QuestionnairModel>(model);
result = result.Where(x => x.QuestionnairOption.Any(l => l.OptionControl1 == true)).ToList();
result.ForEach(x => x.QuestionnairOption.RemoveAll(m => m.OptionControl1 == false));
return View(@"~\Views\Home\About.cshtml", model);
}
这里的问题是,当我从结果对象中删除项目时,它也会从模型中删除。我希望模型对象不应该由于结果对象的任何变化而受到影响。
我知道默认情况下,类是通过引用传递的,这就是为什么将其从两个对象中删除的原因。
让我知道如何使它按价值传递,这可能会解决问题。
感谢@David Pilkington
我已使用以下代码解决了我的问题。
public static class ObjectCopier { /// ///执行对象的深层复制。 /// ///要复制的对象的类型。 ///要复制的对象实例。 ///复制的对象。 公共静态T Clone(T源) { 如果(!typeof(T).IsSerializable) { 抛出新ArgumentException(“类型必须可序列化。”,“源”); } //不要序列化一个空对象, 如果(Object.ReferenceEquals(source,null)) { 返回default(T); } IFormatter formatter = new BinaryFormatter(); 流stream =新的MemoryStream(); 使用(stream) { formatter.Serialize(stream,source); stream.Seek(0,SeekOrigin.Begin); 返回(T)formatter.Deserialize(stream); } } }
我在现有代码中所做的唯一更改就是将[Serializable]属性添加到此类中。
[可序列化] 公共类QuestionnairModel { public long QuestionId { 放; } 公共字符串Question {get; 放; } 公开清单QuestionnairOption {get; 放; } } [可序列化] 公共类QuestionnairOptionModel { public long OptionId {get; 放; } 公共字符串OptionString {get; 放; } public bool OptionControl1 {get; 放; } 公共字符串OptionControl2 {get; 放; } }
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句