getopt()
/ getopts()
является хорошим вариантом. здесь :
Простое использование «getopt» показано в этом мини-скрипте:
#!/bin/bash echo "Before getopt" for i do echo $i done args=`getopt abc:d $*` set -- $args echo "After getopt" for i do echo "-->$i" done
Мы сказали, что любой из -a, -b, -c или -d будет разрешен, но за -c следует аргумент (говорит «c:»).
Если мы назовем это «g» и попробуем:
bash-2.05a$ ./g -abc foo Before getopt -abc foo After getopt -->-a -->-b -->-c -->foo -->--
Начнем с двух аргументов, а «getopt» разрывает опции и помещает их в свои собственный аргумент. Он также добавил «-».
Вам нужно будет ввести новый общий тип. Как только новый тип введен, вы можете устранить необходимость интерфейса.
public class UtilityThing<T, I> where T : Thing<I>, new()
{
public T DoIt(SomeContext someContext, string name)
{
string contextVal = someContext.GetValue(name);
var thing = new T { MyProperty = contextVal };
return thing;
}
}
И вы можете использовать его так:
var utility = new UtilityThing<IntThing, int?>();