Handle IConvertible case to return specific type FluidValues #612
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
fixes #609
The
JValue
class does implement IConvertible, but inFluid.Create
, whenSystem.Type.GetTypeCode()
is called with JValue type in the argument, it returnsTypeCode.Object
. And under this case, it was going to theIFormattable
case and being converted to string regardless of the underlying data type. But whenJValue
is cast toIConvertible
and then theGetTypeCode()
method is called on the object, it does return the correct type code corresponding to the underlying value.So to resolve the issue #609, I have moved the
IConvertible
case aboveIFormattable
, and also changed its implementation to extract the underlying value and call the Create method again with that value. To prevent any infinite recursion, I have explicitly handled theTypeCode.Object
case by returning the string value for it.