有没有办法减少C#中的长参数列表。目前我有:
public ActionResult GetSubmitFields(string orcid, string firstName, string lastName, string badgeName)
{
UserCreateModel vUserTemp = new UserCreateModel();
vUserTemp.OrcidID = orcid;
vUserTemp.FirstName = firstName;
vUserTemp.LastName = lastName;
vUserTemp.BadgeName = badgeName;
return Json(vUserTemp, JsonRequestBehavior.AllowGet);
}
但实际上,我会传递大约20个参数,而且我不想写一个添加每个变量的长垂直列表。
答案 0 :(得分:3)
通常使用的是用于传输此类对象的数据容器。这些是只保存数据但不执行任何操作的类或结构。
示例可以是Microsofts XmlReaderSettings
类,它为XmlReader提供信息:XmlReaderSettings Class
如果你有一个类似你发布的方法,并且想要填充新对象的属性(就像你一样),你也可以这样写:
public ActionResult GetSubmitFields(string orcid, string firstName, string lastName, string badgeName)
{
UserCreateModel vUserTemp = new UserCreateModel() { OrcidID = orcid, FirstName = firstName, LastName = lastName, BadgeName = badgeName };
return Json(vUserTemp, JsonRequestBehavior.AllowGet);
}
这会使用给定值初始化public
属性。其他属性正在按照通常的方式获取默认值。
答案 1 :(得分:2)
首先,您可以稍微简化语法,但列表将保持不变:
public ActionResult GetSubmitFields(string orcid, string firstName, string lastName, string badgeName) {
return Json(
new UserCreateModel {
OrcidID = orcid
, FirstName = firstName
, LastName = lastName
, BadgeName = badgeName
}
, JsonRequestBehavior.AllowGet
);
}
其次,您可以使用dynamic
删除参数列表:
public ActionResult GetSubmitFields(dynamic user) {
return Json(
new UserCreateModel {
OrcidID = user.OrcId
, FirstName = user.FirstName
, LastName = user.lastName
, BadgeName = user.badgeName
}
, JsonRequestBehavior.AllowGet
);
}
该方法的调用应如下所示:
var json = GetSubmitFields( new {
OrcId = 1234
, FirstName = "Keith"
, LastName = "Smith"
, BadgeName = "Ninja"
});
字段名称列表仍然存在,但现在编译器无法验证其类型。例如,如果OrcId
恰好设置为string
,而UserCreateModel
需要int
,则在运行时才会检测到错误。