Если вы не знаете типы, хранящиеся в KeyValuePair
, вам нужно немного поработать с кодом отражения.
Давайте посмотрим, что нужно:
Во-первых, давайте удостоверимся, что значение не null
:
if (value != null)
{
Тогда, давайте удостоверимся, что значение является общим:
Type valueType = value.GetType();
if (valueType.IsGenericType)
{
Затем извлеките определение универсального типа, которое является KeyValuePair<,>
:
Type baseType = valueType.GetGenericTypeDefinition();
if (baseType == typeof(KeyValuePair<,>))
{
Затем извлеките типы значений в нем:
Type[] argTypes = baseType.GetGenericArguments();
Финальный код:
if (value != null)
{
Type valueType = value.GetType();
if (valueType.IsGenericType)
{
Type baseType = valueType.GetGenericTypeDefinition();
if (baseType == typeof(KeyValuePair<,>))
{
Type[] argTypes = baseType.GetGenericArguments();
// now process the values
}
}
}
Если вы обнаружили, что объект действительно содержит KeyValuePair<TKey,TValue>
, вы можете извлечь фактический ключ и значение следующим образом:
object kvpKey = valueType.GetProperty("Key").GetValue(value, null);
object kvpValue = valueType.GetProperty("Value").GetValue(value, null);