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

有没有一种方法可以减少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个参数,我不想写一个长长的垂直列表来添加每个变量。

通常使用的是用于传输此类对象的数据容器。这些类或结构只保存数据,而不做其他事情

例如,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
属性。其他属性会像通常一样获得默认值。

通常使用的是用于传输此类对象的数据容器。这些类或结构只保存数据,而不做其他事情

例如,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
属性。其他属性会像通常一样获得默认值。

首先,您可以稍微简化语法,但列表将保持不变:

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#不是我的强项,所以这就是我为什么要问的原因。我建议将接口作为参数传递。我不熟悉接口,这有什么帮助?