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

时间:2016-09-23 14:25:52

标签: c# .net linq

我的课程如下:

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个静态方法,其中1st static负责添加技能列表。现在,对于每个员工,我想设置性能属性值,第二个静态方法将与技能列表一起使用。

我有一些逻辑,通过它我知道何时返回false到性能属性以及何时将Rate和Statictics设置为 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;
        }

3 个答案:

答案 0 :(得分:4)

我有一种感觉,如果你要显示你的代码背后的逻辑,就有可能将它重构为一个不需要多值返回类型的状态 - 但我会回答假设这是不相关的

我想到了三种可能性,我认为其中没有一种非常漂亮:

  • 输出变量:

    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)
    
  • 专用课程:使用两个相关属性创建一个简单的类。

答案 1 :(得分:3)

您可以使用新的元组结构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.Item2)

答案 2 :(得分:1)

为什么不将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) {}