Вы можете использовать
.scan(/^#(?!#)(?:(?!```)[^#]|```.*?```)*/m).flatten
См. Ruby demo и Rubular demo .
Подробности
^
- начало строки #(?!#)
- a #
, за которым не следует другой #
[1118 ] (?:(?!```)[^#]|```.*?```)*
- 0 или более повторений (?!```)[^#]
- любого символа, кроме #
, который не запускает ```
последовательность символов |
- или ```
- три обратных бекака .*?
- любые 0+ символов, как можно меньше ```
- три бекака Модификатор m
позволяет .
соответствовать любому символу, включая символы разрыва строки.
Ваше намерение очень неясно; однако, одна опция является дженериками и MakeGenericMethod
в частности. Что Вы хотите сделать с этим? Например:
static class Program
{
static void Main()
{
object obj = 123.45;
typeof(Program).GetMethod("DoSomething")
.MakeGenericMethod(obj.GetType())
.Invoke(null, new object[] { obj });
}
public static void DoSomething<T>(T value)
{
T item = value; // well... now what?
}
}
Так же теперь у нас есть значение, введенное как double
через дженерики - но все еще нет очень, мы можем сделать с ним за исключением вызова другой общие методы..., что это было, Вы хотите сделать здесь?
Я не могу думать, почему Вы хотели бы снять в качестве GetType (), потому что Вы не сможете сделать что-либо к полезному с результатом, не зная тип во время компиляции так или иначе.
, Возможно, то, что Вы ищете, является способностью Преобразовать. Если это так, следующее должно работать на Вас:
object input = GetSomeInput();
object result = Convert.ChangeType(input, someOtherObject.GetType());
Мы используем это при чтении значений из реестра, которые все хранятся как строки и затем наполнение их в свойства с помощью отражения.
Можно использовать Activator.CreateInstance
метод для создания экземпляра из типа.
к вашему сведению отражение является SLOOWWWW, поэтому если необходимо сделать этот бросок много раз подряд, может быть лучше определить типы в перечислении, или что-то вроде этого затем создает экземпляры, не используя отражение.