Как я могу определить, может ли объект 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

Я не уверен, каковы условия, поэтому поиск моего ответа оказывается трудным.

Ответы на вопрос(6)

Ваш ответ на вопрос