Тип динамического списка [дубликат]

Bash 4.0 представила опцию globstar, поэтому такая конструкция, как:

for f in mydir/**/*
do
  # operations here
done

... будет действовать рекурсивно на любые земли в $ f. Включите это с помощью «shopt-globstar», в противном случае ** будет рассматриваться как единственное *.

Нашел этот драгоценный камень сегодня в http://www.linuxjournal.com/content/ globstar-new-bash-globbing-option , после того как он вдохновлен конструкцией zsh (по умолчанию я включил ее).

13
задан Fredrik Mörk 18 March 2010 в 23:51
поделиться

4 ответа

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

    Type myType;
    Type listType = typeof(List<>).MakeGenericType(myType);
    IList myList = (IList)Activator.CreateInstance(listType);
26
ответ дан 1 December 2019 в 19:23
поделиться

да, используя общий, вы можете сделать что-то вроде этого

    var asd = METHOD<Button>();

    List<t> METHOD<t>()
    {
        return new List<t>();
    }
-1
ответ дан 1 December 2019 в 19:23
поделиться

Да. Вы можете сделать это через Reflection, используя Type.MakeGenericType и Activator.CreateInstance .

IList MakeListOfType(Type listType)
{
    Type listType = typeof(List<>);
    Type specificListType = listType.MakeGenericType(listType);

    return (IList)Activator.CreateInstance(specificListType);
}
9
ответ дан 1 December 2019 в 19:23
поделиться

Да. Однако вы не сможете присвоить его переменной с универсальным типом, поскольку T в этом случае не будет определено до времени выполнения. (Если вы думаете, что функция ковариации .NET 4.0 поможет вам и позволит вам объявить переменную как IList , этого не произойдет, поскольку T используется List для в и вне целей.)

Обратите внимание на необычный синтаксис List <> для доступа к «неструктурированному» универсальному типу.

    public static System.Collections.IList ConstructGenericList(Type t)
    {
        return (System.Collections.IList)Activator.CreateInstance(typeof(List<>).MakeGenericType(t));
    }
1
ответ дан 1 December 2019 в 19:23
поделиться
Другие вопросы по тегам:

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