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 (по умолчанию я включил ее).
Это возможно, но не обязательно полезно, так как вы фактически не мог использовать его из скомпилированного кода как строго типизированный. Код создания будет
Type myType;
Type listType = typeof(List<>).MakeGenericType(myType);
IList myList = (IList)Activator.CreateInstance(listType);
да, используя общий, вы можете сделать что-то вроде этого
var asd = METHOD<Button>();
List<t> METHOD<t>()
{
return new List<t>();
}
Да. Вы можете сделать это через Reflection, используя Type.MakeGenericType и Activator.CreateInstance .
IList MakeListOfType(Type listType)
{
Type listType = typeof(List<>);
Type specificListType = listType.MakeGenericType(listType);
return (IList)Activator.CreateInstance(specificListType);
}
Да. Однако вы не сможете присвоить его переменной с универсальным типом, поскольку 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));
}