c# - 来自函数的可变数量的结果

标签 c#

我在很多地方都有类似下面的代码:

var dbParams = db.ReadParams(memberID, product, GetSubscriptionFields());
Debug.Assert(dbParams.Count == 4);

_memberCode = dbParams[0];
_password = dbParams[1];
_userName = dbParams[2];
_reasonCode = dbParams[3];

ReadParams() 返回一个字符串数组,字符串的数量取决于 GetSubscriptionFields() 函数。我可以在我的代码中直接使用 dbParams[],但我发现为数组中的每个值赋予有意义的名称更有帮助。有没有一种方法可以直接获取所有结果,而无需通过数组?

我正在寻找类似的东西:

db.ReadParams(memberID, product, out _memberCode, out _password, out _userName, out _reasonCode);

Tuple<_memberCode, _password, _userName, _reasonCode> = db.ReadParams(memberID, product);

当然,它必须是合法的C#代码:)

最佳答案

您正在使用高度面向对象的语言编写代码,那么为什么不使用对象呢?

Member m = db.ReadParams(memberID, product, GetSubscriptionFields());

并在您使用的代码中

m.memberCode
m.password
m.username
m.reasonCode

当然,您不必让这些值可公开访问,您可以让它们只能通过 setter/getter 方法访问,并且通过只使用 getter,您可以避免它们在对象创建后被更改。

当然,对 db.ReadParams 的不同调用应该返回不同的对象,例如您可以创建一个抽象基类并从它的 db.ReadParams 继承所有可能的结果。因此,您可能必须将 db.ReadParams 封装到另一个方法中,以找出要创建的正确对象类型:

ReadParamsResult rpr = myDb.ReadParamsAsObject(memberID, product, GetSubscriptionFields());

// Verify that the expected result object has been returned
Debug.Assert(rpr is Member);

// Downcast
Member m = (Member)rpr;

关于c# - 来自函数的可变数量的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/264817/

相关文章:

c# - 禁用点击按钮事件c#

c# - Mac OSX 上的 Newtonsoft JSON.NET 6.0.8 和 Mono 以光荣的方式失败

c# - 我的数据库事务是否正确?

c# - 盒子内容 API : Is modified_at field of parent folder updated when deleting an item from folder?

c# - 如何使用 C# 应用程序中的 Delphi 代码?

c# - asp.net C# 中的按钮单击事件不会更改文本框值

c# - 如何在 LINQ 查询中添加静态

c# - 如何模拟 Web 服务

c# - 生成唯一密码

c# - 从C++调用uv *作为cv::Mat到WPF应用程序BitmapSource?