C# 减少冗长的参数列表
有没有一种方法可以减少C#中的长参数列表。目前我有:C# 减少冗长的参数列表,c#,C#,有没有一种方法可以减少C#中的长参数列表。目前我有: public ActionResult GetSubmitFields(string orcid, string firstName, string lastName, string badgeName) { UserCreateModel vUserTemp = new UserCreateModel(); vUserTemp.OrcidID = orcid; vUserTemp.FirstName = firstN
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个参数,我不想写一个长长的垂直列表来添加每个变量。通常使用的是用于传输此类对象的数据容器。这些类或结构只保存数据,而不做其他事情 例如,Microsofts
XmlReaderSettings
类为XmlReader提供信息:
如果您有一个类似于您发布的方法,并且希望填充新对象的属性(如您所做的),您还可以编写以下内容:
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
属性。其他属性会像通常一样获得默认值。通常使用的是用于传输此类对象的数据容器。这些类或结构只保存数据,而不做其他事情
例如,MicrosoftsXmlReaderSettings
类为XmlReader提供信息:
如果您有一个类似于您发布的方法,并且希望填充新对象的属性(如您所做的),您还可以编写以下内容:
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
属性。其他属性会像通常一样获得默认值。首先,您可以稍微简化语法,但列表将保持不变:
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
,则直到运行时才会检测到错误。首先,您可以稍微简化语法,但列表将保持不变:
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
恰好被设置为字符串,而UserCreateModel
需要int
,则直到运行时才会检测到错误。传递包含所有变量的自定义对象/类。老实说,这完全是一个意见问题,取决于需求。我只是想写高效的代码,而C#不是我的强项,所以这就是为什么我要问的原因。我建议将接口作为参数传递。我不熟悉接口,这有什么帮助?传递一个包含所有变量的自定义对象/类。老实说,这完全是一个意见问题,取决于需求。我只是想写高效的代码,而C#不是我的强项,所以这就是我为什么要问的原因。我建议将接口作为参数传递。我不熟悉接口,这有什么帮助?