Что лучший способ состоит в том, чтобы возвратить два списка в C#?

Статический импорт используется для импорта статических полей / метод класса вместо:

package test;

import org.example.Foo;

class A {

 B b = Foo.B_INSTANCE;

}

можно записать:

package test;

import static org.example.Foo.B_INSTANCE;

class A {

 B b = B_INSTANCE;

}

полезно, если Вы часто используетесь константа от другого класса в Вашем коде и если статический импорт не неоднозначен.

Btw, в Вашем примере "импортируют статический org.example. Myclass"; не будет работать: импорт для класса, статичный импорт для статических членов класса.

16
задан Joel Coehoorn 8 July 2009 в 16:33
поделиться

5 ответов

Прежде всего, это, вероятно, должно быть out , а не ref .

Во-вторых, вы можете объявить и вернуть тип, содержащий два списка.

В-третьих, вы можете объявить общий кортеж и вернуть его экземпляр:

class Tuple<T,U> {
   public Tuple(T first, U second) { 
       First = first;
       Second = second;
   }
   public T First { get; private set; }
   public U Second { get; private set; }
}

static class Tuple {
   // The following method is declared to take advantage of
   // compiler type inference features and let us not specify
   // the type parameters manually.
   public static Tuple<T,U> Create<T,U>(T first, U second) {
        return new Tuple<T,U>(first, second);
   }
}

return Tuple.Create(firstList, secondList);

Вы можете расширить эту идею для разного количества позиций.

31
ответ дан 30 November 2019 в 15:17
поделиться

Ваше первое предложение - это не два списка. Это список списков.

Второй вариант будет делать то, что вы намереваетесь, но вы можете изменить его, чтобы использовать ключевое слово out вместо ref, чтобы вызывающие вашего метода знали намерение того, что вы делаете.

public void ReturnTwoLists(out List<MyType> listOne, out List<myType> listTwo);
4
ответ дан 30 November 2019 в 15:17
поделиться

Создать простую структуру, которая содержит и то и другое, и вернуть ее в качестве выходных данных функции?

0
ответ дан 30 November 2019 в 15:17
поделиться

Верните это:

public class MyTwoLists {
    public List<MyType> ListOne {get;set;}
    public List<MyType> ListTwo {get;set;}
}
24
ответ дан 30 November 2019 в 15:17
поделиться

У вас есть несколько вариантов:

используйте пару, если списки бессмысленны по порядку:

 public Pair<List<MyType>,List<MyType> ReturnTwoLists()
 {
        return new Pair(new List<MyType(), new List<MyType());
 }

Вы можете использовать out или ref ], как вы упомянули. Это хороший вариант, если один список более значим, чем другой.

Вы можете использовать словарь, если клиент знает ключи или хочет выполнить работу по их поиску:

 public Dictionary<string,List<MyType> ReturnTwoLists()
 {
        Dictionary<string,List<MyTpe>> d = new Dictionary<string,List<MyType>>();
        d.Add("FirstList",new List<MyType>());
        d.Add("SecondList",new List<MyType>());
        return new Dictionary()(new List<MyType(), new List<MyType());
 }

Или, самый " На мой взгляд, правильным решением для полноты и согласованности было бы создание простого класса контейнера данных для хранения двух списков. Это предоставляет потребителю строго типизированные, хорошо скомпилированные статически (читай: с поддержкой intellisense) возвращаемые значения для работы. Класс может быть вложен рядом с методом.

3
ответ дан 30 November 2019 в 15:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: