Not all data types have a built-in ToString method. Moreover, built-in methods can throw an error if, for example, an object is empty, or can only return the type name. This tip shows how to build a universal method (for example in extensions) that recognizes the type of data and converts it into a meaningful text string.
Using the Code
The method can be placed directly in the program class or extension class. Remember to remove the static
and this
declarations if you are using a dynamic class.
public static string AsString(this object oValue, bool ClearlyNamed = false)
{
if (oValue == null) return ClearlyNamed ? "<null>":"";
if (oValue.GetType() == typeof(string)) return oValue as string;
if (oValue.GetType() == typeof(string[])) return string.Join(";",(string[])oValue));
return ClearlyNamed?("<"+oValue.getType().Name+">"):"";
}
In the first line, the method detects if the object is empty and returns an empty string or description.
Then, in subsequent if
blocks, it recognizes what type of data we are trying to present as a string
and converts the data into text. The last line returns a text value if the data is not null
but we cannot (or do not want to) determine its type.
The optional parameter ClearlyName
forces the method not to process an null
value or an unknown type into an empty string
, but a description of what the input is.
It depends on the imagination of the coder whether it introduces the recognition of the next possible types of input data and the ways of processing it into text.
Comments and Explanations
Colleague Phil.o noticed well that the originally used method of merging the text from the array (using string1 + = string2
) is not optimal and StringBuilder
should be used. I corrected the source code as noted, but used a simpler method using string.Join
.
History
- 28th October, 2021: Initial version