您应该创建一个值对象来保存要返回的数据。我有一个程序员同事说“输出参数适用于青少年和大学生”。对大学生和青少年没有冒犯,但我倾向于同意这种观点......我永远不会使用参数。
解决手头问题的最简洁方法是这样的:
public class FooData
{
public List<string> Strings { get; set; }
public int MyInt { get; set; }
}
public FooData GetFooData(int id)
{
var fooStrings = _stringRepository.GetFooStrings(id);
//or wherever you're getting your data from
return new FooData
{
Strings = fooStrings,
MyInt = id, //or whatever the int prop is supposed to be
};
}
我从 Bob Martin 的书“清洁代码”中学到的一个很好的经验法则是:如果有要返回的数据,则返回它。如果要返回的日期类型不止一种,请将它们加载到包装类中。它会让你的生活更轻松,下一个必须查看你的代码的人会花更少的时间挠头。
编辑:
如果您是 C# 新手,我想我会添加一点解释。您的方法以void
. 这意味着它不会返回任何东西。是的,有 out 参数,但您可能已经删除了它们。:) 而不是void
,您的方法需要返回一个类型。如果您只有一种类型的数据要返回,例如List<string>
,您可以说List<string> GetFooData(int id)
,等等。在上面的示例中,我添加了调用FooData
方法的新类/类型,以便它返回FooData
。希望这可以帮助。如果您已经知道所有这些,请抱歉说“显而易见”。(摆脱你的输出参数!)
另一个编辑:
如果您尝试使用 ASP.NET MVC 进行这项工作,正如其他评论者所建议的那样,您应该以“MVC”方式进行。如果你有一个需要数据的视图,给它一个像这样的视图模型:
public ViewResult SomeViewWithFooData(int id)
{
var fooStrings = _stringRepository.GetFooStrings(id);
//or wherever you're getting your data from
var fooData = new FooData
{
Strings = fooStrings,
MyInt = id, //or whatever the int prop is supposed to be
};
return new View(fooData);
}
然后,您可以拥有一个名为的视图,该视图SomeViewWithFooData
继承自System.Web.Mvc.ViewPage<FooData>
. 在您的视图中,只需调用Model
即可获取您的数据。此时,Model
是 FooData 类型。
<%=Model.MyInt %>
是您的 int 从控制器操作传递给视图。
<%=Model.Strings %>
是您的字符串列表。