如何从单个方法返回两个值,并设置两个父类属性调用函数一次

本文关键字:两个 调用 属性 父类 函数 一次 设置 单个 方法 返回 | 更新日期: 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) {}