Я пишу interop между php-сервисом и нашим crm. Одна из вещей, которую мне нужно сделать, - убедиться, что простые типы преобразуются в ToString() для использования позже в json-конверторе.Как определить, может ли объект ToString присвоить значение или имя типа?
Я не уверен, что это имя для «простых типов», но его можно определить следующим образом ... »объект, представляющий тип переменной низкого уровня, содержащий одно значение, а не класс или что-либо еще с исполняемые функции и т. д. »
Я обнаружил, что int, string, bool, double и удивительно перечислены будут ToString() с довольно предсказуемыми результатами.
int x = 0;
bool y = true;
double z = 1.59 // money
CustomEnum theEnum = CustomEnum.somevalue;
x.ToString() приводит к "0"
y.ToString приводит к "1,59"
theEnum() приводит к "истинной"
z.ToString() .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
Я не уверен, что эти термины, так прибегая к помощи моему ответ оказывается трудным.
Если список, используйте string.join («», MyList), чтобы получить строку CSV из все значения –
Результат всегда является строкой, поэтому как вы можете получить значение? (за исключением 'string.ToString') – leppie
well Если вы контролируете типы, которые будет отображаться вашим сервисом/интерфейсом, вы можете просто убедиться, что каждый экспонированный объект переопределяет ToString() таким образом, что он отображает читаемое представление содержимого. @leppie, если я правильно понял, OP хочет знать, можно ли проверять тип для того, будет ли его переопределение ToString() (или базовый класс по умолчанию) отображать сущность содержимого объекта или представление его типа/generic – dlatikay