Car*_*omp 5 c# object tostring typename
我正在编写 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;
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
iList.ToString() 结果为“System.Collections.Generic.List`1[System.Int32]” Class.ToString() 结果为“STTI.NKI.Interop.MyClass”
我不限于列表。我可以有一个 ExpandoObject 或一个类等。
我完全理解为什么会发生这种情况,并且我想知道是否有一种快速方法来确定未知类型的对象是否将 ToString() 转换为预期值,而不是类型名称。我发现做类似的事情是一种反模式
switch (theObject.GetType())
case typeof(int):
case typeof(bool):
case typeof(doulble):
etc
Run Code Online (Sandbox Code Playgroud)
我不确定这些术语是什么,所以谷歌搜索我的答案很困难。
那么你想检查一个类型是否有重写的ToString方法?为什么不只检查返回的值是否ToString等于默认实现返回的值ToString?
从这里,我们知道默认实现ToString是
return GetType().ToString();
Run Code Online (Sandbox Code Playgroud)
因此,我们可以使用它来检查对象是否重写了该ToString方法:
bool toStringOverridden = someObject.GetType().ToString() !=
someObject.ToString();
Run Code Online (Sandbox Code Playgroud)