Вызывание родовой функции с параметром типа, определенным во времени выполнения

можно использовать длинный тип данных. Несомненно, Вы не будете в состоянии сохранить части там, но если Вы кодируете свое приложение для хранения пенсов вместо фунтов, Вы будете в порядке. Точность составляет 100% для длинных типов данных, и если Вы не работаете с огромными количествами (используйте 64-разрядный длинный тип), Вы будете в порядке.

, Если Вы не можете передать под мандат пенсы хранения, затем оберните целое число в класс и использование это.

8
задан Ryan Stecker 21 September 2009 в 18:14
поделиться

3 ответа

Самый простой способ справиться с этим - сделать неуниверсальную перегрузку функции чтения с одним параметром типа:

public object Read(Type t)

И затем сделать так, чтобы общая версия вызывала неуниверсальную версию:

public T Read<T>() where T : struct
{
    return (T)Read(typeof(T))
}
12
ответ дан 5 December 2019 в 08:24
поделиться

Вам нужно будет создать methodinfo и вызвать метод Read:

MethodInfo method = typeof(DataStream).GetMethod("Read");
MethodInfo generic = method.MakeGenericMethod(fieldType);
object objData = generic.Invoke(ds, null);
7
ответ дан 5 December 2019 в 08:24
поделиться

Наверное, лучше было бы пойти по пути Ли. Generic - это сокращение во время разработки, чтобы вам не приходилось писать общий код для многих различных типов классов. Во время компиляции каждый вызов универсального метода или класса в основном генерируется как полностью отдельный класс.

Гораздо проще просто изменить тип и использовать отражение, что вам придется делать в любом случае.

1
ответ дан 5 December 2019 в 08:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: