如何从单个方法返回两个值,并设置两个父类属性调用函数一次
本文关键字:两个 调用 属性 父类 函数 一次 设置 单个 方法 返回 | 更新日期: 2023-09-27 18:08:26
我有这样一个类:
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public bool performance { get; set; }
public List<Skills> Skills { get; set; }
}
public class Skills
{
public int Id { get; set; }
public string skills { get; set; }
public int Rate { get; set; }
public int statistics { get; set; }
}
我有2个静态方法,其中第一个静态负责添加技能列表。现在,对于每个员工,我想设置性能属性值,第二个静态方法将与技能列表一起抛出。
我有一些逻辑,通过它我知道什么时候返回false到性能属性,什么时候设置速率和统计0,但我唯一没有得到的是如何返回技能和相关的真或假值的列表,而不调用我的第二个静态方法两次。
:
public static List<Employee> ReturnEmployeeList(List<EmployeesModel> employeesModel)
{
var list = new List<Employee>();
foreach (var item in employeesModel)
{
list.Add
(
new Employee
{
EmployeeId = item.EmployeeId,
Version = item.Name,
performance=????, // i want to set this value based on value return by 2nd static method
Skills = ReturnSkillList(item.SkillModels)
}
);
}
return list;
}
private static List<Skills> ReturnSkillList(List<SkillModels> skillModel)
{
var list = new List<Skills>();
//Here i have some logic in which i know when to set Rate and statictics to 0 and return false for performance properties
return list;
}
我有一种感觉,如果您将显示代码背后的逻辑,就有可能将其重构为不需要多值返回类型的状态-但我将回答假设这无关紧要。
我想到了三种可能性,在我看来没有一种是很好的:
-
变量:
bool performance; Skills = ReturnSkillList(item.SkillModels, out performance);
,函数签名为:
private static List<Skills> ReturnSkillList(List<SkillModels> skillModel, out bool perf)
-
元组:
Tuple<List<Skills, bool> temp = ReturnSkillList(item.SkillModels, out performance); Skills = temp.Item1; performance = temp.Item2;
,函数签名为:
private static Tuple<List<Skills>, bool> ReturnSkillList(List<SkillModels> skillModel, out bool perf)
- 专用类:创建一个具有两个相关属性的简单类
您可以使用新的Tuple结构https://msdn.microsoft.com/en-us/library/system.tuple(v=vs.110).aspx
方法如下:
private static Tuple<bool, List<Skills>> ReturnSkillList(List<SkillModels> skillModel)
{
var list = new List<Skills>();
var performance = false;
// your logic here
return new Tuple<bool, List<Skills>>(performance, list);
}
然后访问性能使用元组值Item1和访问列表使用Item2(即a.t eitem2)
为什么不在循环中使用Tuple<bool, List<Skills>>
存储到局部变量?然后可以在构造函数中从中读取。
var performanceAndSkills = ReturnPerformanceAndSkills(item.SkillModels);
list.Add(new MockList
{
EmployeeId = item.EmployeeId,
Version = item.Name,
performance = performanceAndSkills.Item1,
Skills = performanceAndSkills.Item2,
});
private static Tuple<bool, List<Skills> ReturnPerformanceAndSkills(List<SkillModel> skills) {}