Вы можете сделать это с помощью Используя php explode()
:
$string = "Hi, my name is Bob, I am 20 years old and like cats. Hi, my name is Dylan, I am 25 years old and like dogs. Hi, my name is Tambourine, I am 30 years old and like turtles";
print_r (explode(".",$string));
Используя Regex:
$string = "Hi, my name is Bob, I am 20 years old and like cats. Hi, my name is Dylan, I am 25 years old and like dogs. Hi, my name is Tambourine, I am 30 years old and like turtles";
$arr = preg_split('/[ap]\.m\.(*SKIP)(*FAIL)|\./', $string);
print_r($arr);
В соответствии с MSDN :
Вызов GetType для типа Nullable вызывает операцию бокса выполняется, когда тип неявно преобразован в объект. Поэтому GetType всегда возвращает объект Type, который представляет базовый тип, а не Обнуляемый тип.
Когда вы упаковываете обнуляемый объект, упаковывается только базовый тип.
Опять же, из MSDN :
Упаковка ненулевого типа значения, допускающего обнуляемое значение. блокирует сам тип значения, а не System.Nullable, который переносит значение введите.
В дополнение к правильному ответу Ромена, если вы хотите сравнить «настоящие» типы (то есть, без неявного преобразования любого обнуляемого типа в его базовый тип), вы можете создать метод расширения следующим образом:
public static class MyExtensionMethods
{
public static Type GetRealType<T>(this T source)
{
return typeof(T);
}
}
А затем попробуйте выполнить следующие тесты:
int? a = 0;
Console.WriteLine(a.GetRealType() == typeof(int?)); // True
Console.WriteLine(a.GetRealType() == typeof(int)); // False
int b = 0;
Console.WriteLine(b.GetRealType() == typeof(int)); // True
Console.WriteLine(b.GetRealType() == typeof(int?)); // False
DateTime? c = DateTime.Now;
Console.WriteLine(c.GetRealType() == typeof(DateTime?)); // True
Console.WriteLine(c.GetRealType() == typeof(DateTime)); // False
DateTime d = DateTime.Now;
Console.WriteLine(d.GetRealType() == typeof(DateTime)); // True
Console.WriteLine(d.GetRealType() == typeof(DateTime?)); // False
РЕДАКТИРОВАТЬ ...
Для полноты - и подсказки комментариев SLaks ниже - вот альтернативная версия, которая использует только тип времени компиляции, когда source
имеет значение null
или Nullable <>
; в противном случае он использует GetType
и возвращает тип времени выполнения:
public static class MyExtensionMethods
{
public static Type GetRealType<T>(this T source)
{
Type t = typeof(T);
if ((source == null) || (Nullable.GetUnderlyingType(t) != null))
return t;
return source.GetType();
}
}