Почему я не могу сделать что-то вроде этого:
var myDictionary = new Dictionary<string, Type>();
// Add data to dictionary
foreach(var kvPair in myDictionary)
{
var result = SomeMethod<kvPair.Value>(kvPair.Key); // Error
}
Поэтому я не могу использовать Type, который у меня есть в элементе Dictionary, и использовать его в параметре type. Да, я могу просто отправить словарь в SomeMethod (KeyValuePair). Однако я не контролирую, как функция реализована.
Ошибка: имя типа или пространства имен "kvPair" не может быть найдено (вам не хватает директивы using или ссылки на сборку?
Я чувствую, что мне не хватает чего-то довольно фундаментального, и я не уверен, что это такое.
Я чувствую, что мне не хватает чего-то довольно фундаментального, и я не уверен, что это такое.
Да, вам не хватает, что общие параметры являются статическими, а не динамическими. Они не могут быть обнаружены во время выполнения. Один из вариантов в вашем случае - использовать рефлексию для создания вызова метода generic во время выполнения:
foreach(var kvPair in myDictionary)
{
// use reflection to create generic MethodInfo object
MethodInfo mi = typeof(this).GetMethod("SomeMethod");
MethodInfo mig = mi.MakeGenericMethod(kvPair.Value);
// call generic method
Object result = mig.Invoke(this, new object[] {kvPair.Key});
// cast to desired return type.
}
Однако, прежде чем идти по этой дороге, я бы сделал шаг назад и посмотрел, являются ли дженерики лучшим дизайном, теперь вы знаете, что они не опоздали.