我在很多地方都有类似下面的代码:
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/