C # Возвращает enum и массив int - PullRequest
2 голосов
/ 13 января 2011

Я работаю над тем, что мне нужно будет вернуть перечисление и массив целых чисел. Я могу обойти всю проблему и использовать int вместо enum и добавить его в качестве первого элемента массива, но enum действительно помогает моей разборчивости кода. Есть ли способ вернуть оба одновременно?

1 Ответ

11 голосов
/ 13 января 2011

Есть 3 общих решения для этого.Какой из них подходит, зависит от конкретной ситуации и ваших личных предпочтений:

  1. Используйте параметр out для одного из них.Это не требует новых типов, но неудобно звонить.Кроме того, он не может семантически фиксировать взаимосвязь между возвращаемыми значениями.

    public int[] MyMethod(out MyEnumType myEnum)
    { 
        myEnum = ...
        int[] nums = ...    
        return nums;
    }
    
  2. Используйте тип Tuple<,> (.NET 4.0).Это требует только создания закрытого универсального типа из существующего типа BCL, но вызывающим может не понравиться тот факт, что инкапсулированные свойства имеют бессмысленные имена: Item1 и Item2 Вы также можете ввести KeyValuePair<,> или написать свойсобственный Pair<,> тип для аналогичной цели.

    public Tuple<int[], MyEnumType> MyMethod() 
    {
        int[] nums = ...
        MyEnumType myEnum = ...
        return Tuple.Create(nums, myEnum); 
    }
    
  3. Напишите класс-оболочку, который инкапсулирует массив int и перечисление.Больше работы, но приятнее работать с вызывающим абонентом.

    public class Wrapper
    { 
        public int[] Nums { get { ... } } 
        public MyEnumType MyEnum { get { ... } }
    }
    ...
    public Wrapper MyMethod() 
    { 
        Wrapper wrapper = ...
        return wrapper;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...