Как я могу определить, может ли объект ToString в значение или имя типа?
Я пишу взаимодействие между php-сервисом и нашим crm. Одна из вещей, которые мне нужно сделать, - убедиться, что простые типы конвертируются в ToString () для последующего использования в json конвертере.
Я даже не уверен, что такое название для «простых типов», но его можно определить так: «объект, представляющий тип переменной низкого уровня, содержащий одно значение, а не класс или что-либо с исполняемыми функциями и т. Д.»
Я обнаружил, что int, string, bool, double и удивительно enum будут ToString () с довольно предсказуемыми результатами.
int x = 0;
bool y = true;
double z = 1.59 // money
CustomEnum theEnum = CustomEnum.somevalue;
x.ToString () приводит к "0"
y.ToString () приводит к «true»
z.ToString () приводит к «1,59»
theEnum.ToString () приводит к «somevalue»
Но если я использую это:
List<int> iList = new List<int>();
iList.Add(1);
MyClass theClass = new MyClass();
iList.ToString () приводит к «System.Collections.Generic.List`1 [System.Int32]», theClass.ToString () приводит к «STTI.NKI.Interop.MyClass»
Я не ограничен списками. Я мог бы иметь ExpandoObject или класс и т. Д.
Я ТОЧНО понимаю, почему это происходит, и я хочу знать, есть ли быстрый способ определить, будет ли объект неизвестного типа преобразовывать ToString () в ожидаемое значение, а не имя типа. Я нахожу это антипаттерном, чтобы делать что-то вроде
switch (theObject.GetType())
case typeof(int):
case typeof(bool):
case typeof(doulble):
etc
Я не уверен, каковы условия, поэтому поиск моего ответа оказывается трудным.