我的代码如下:
itemView.Question.AnswersJSON = itemView.Answer.ToJSONString();
itemView.Question.Modified = DateTime.Now;
itemView.Question.ModifiedBy = User.Identity.Name
加上更多行,我为Question
内的itemView
类设置了值。
我认为答案是“不可能”,但只是把它作为一个问题,以防任何人知道某种方式。
我想要做的是找到一种简化此代码的方法,而不必在每一行中重复itemView.Question
。
答案 0 :(得分:22)
您是否将itemView.Question实例化为方法的一部分?
如果是这样,你可以这样做: -
itemView.Question = new ItemViewQuestion()
{
AnswersJSON = itemView.Answer.ToJSONString(),
Modified = DateTime.Now,
ModifiedBy = User.Identity.Name
};
答案 1 :(得分:13)
如果Question
是class
(不是struct
),那么您可以将其分配给本地变量,并编辑:
Question q = itemView.Question;
q.AnswersJSON = itemView.Answer.ToJSONString();
q.Modified = DateTime.Now;
q.ModifiedBy = User.Identity.Name
您甚至不必将q
分配回itemView.Question
。
这是因为C#中的类是reference types。如果将引用类型的实例分配给局部变量,或将其传递给函数,则对该实例的更改将反映在您对该同一实例的引用的任何位置。
修改强>
请注意,如果Question
是itemView
的属性而不是字段,则情况可能有点模糊。根据实施方式,您可能需要将q
分配回Question
。在这种情况下,这个代码仍然是首选,以避免重复调用Question
属性的getter方法。
答案 2 :(得分:11)
一个选项是您可以将属性转换为返回'this'的方法。
然后你可以写:
itemView.Question
.AnswersJSON(itemView.Answer.ToJSONString())
.Modified(DateTime.Now)
.ModifiedBy(User.Identity.Name);
我听说过这种称为“流畅的界面”的风格,并且发现它非常方便。我有时创建属性和匹配的set方法,返回'this',称为SetXXXX,以补充它们。
用于单元测试的流行Rhino Mocks框架使用它。这里有更多示例:http://www.codeproject.com/Articles/99542/Guidelines-to-Fluent-Interface-design-in-C-Part-1
答案 3 :(得分:4)
如果该课程是一个课程,那么您可以稍微缩短代码:
var q = itemView.Question;
q.AnswersJSON = itemView.Answer.ToJSONString();
q.Modified = DateTime.Now;
q.ModifiedBy = User.Identity.Name
答案 4 :(得分:4)
根据您对Question
课程的控制程度,将设置元数据的责任分开可能是一个想法:
class Question {
...
public void SetAnswer(Answer answer) {
this.AnswersJSON = answer.ToJSONString();
this.Modified = DateTime.Now;
this.Modified = User.Identity.Name; // or pass the user into SetAnswer()
}
}
// in your UI code:
itemView.Question.SetAnswer(itemView.Answer);