I’m currently trying to write a Dump() method from LinqPad equivalent iin C# for my own amusment. I’m moving from Java to C# and this is an exercise rather than a business requirement. I’ve got almost everything working except for Dumping a Dictionary.
The problem is that KeyValuePair is a Value type. For most other Value types I simply call the ToString method but this is insufficient as the KeyValuePair may contain Enumerables and other objects with undesirable ToString methods. So I need to work out if it’s a KeyValuePair and then cast it. In Java I could use wildcard generics for this but I don’t know the equivalent in C#.
Your quest, given an object o, determine if it’s a KeyValuePair and call Print on its key and value.
Print(object o) {
...
}
Thanks!
If you don’t know the types stored in the
KeyValuePairyou need to exercise a bit of reflection code.Let’s look at what is needed:
First, let’s ensure the value isn’t
null:Then, let’s ensure the value is generic:
Then, extract the generic type definition, which is
KeyValuePair<,>:Then extract the types of the values in it:
Final code:
If you’ve discovered that the object does indeed contain a
KeyValuePair<TKey,TValue>you can extract the actual key and value like this: