我正在编写一个php服务和我们的crm之间的互操作。我需要做的事情之一是确保简单的类型转换为ToString()以供稍后在json转换器中使用。如何确定对象是否可以将ToString转换为值或键入名称?
我不确定'简单类型'的名称是什么,但它可以像这样定义...“表示低级变量类型的对象,包含单个值,不包含类或任何可执行函数等“
我发现INT,字符串,布尔,双和令人惊讶的枚举将ToString()与相当可预测的结果。
int x = 0;
bool y = true;
double z = 1.59 // money
CustomEnum theEnum = CustomEnum.somevalue;
x.ToString()的结果为 “0”
y.ToString()的结果为 “真”
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
我不知道该条款是什么,所以谷歌上搜索我的答案被证明是困难的。
如果列表,使用的string.join(“” myList中)得到的CSV字符串所有值 –
结果始终是一个字符串,那么如何获得一个值? (除了使用'string.ToString') – leppie
如果你在控制你的服务/接口将要公开的类型,你可以确保每个暴露的对象都覆盖了ToString(),使得它呈现一个可读的表示的内容。 @leppie如果我知道它是正确的,OP想知道是否有可能检查类型是否它的ToString()覆盖(或基类默认)将呈现对象内容的要点或其类型的表示/ generic – dlatikay