Могу ли я получить операторы приведения через отражение и вызвать их (или, если есть лучшее название для этого действия)? Это главный вопрос, если да, то это решает мою проблему.
Но если кто-то знает другое решение для следующего:
У меня много объектных переменных (неизвестные количества до времени выполнения), каждый из них имеет другой тип, но все они числа (double, int, short).
С другой стороны, у меня такое же количество двойных варов, и мне нужно сравнивать значения каждого из них.
object[] Value1; //this can be double, short or int, only known at runtime.
double[] Value2;
//I need simply to do:
(for int i = 0; i < Value1.Length, i++)
{
(if Value1[i] == Value2[i]) //here's the problem
//the comparison always return false, because of different types
....
Я пробовал много вещей, в том числе метод «CompareTo», вызываемый через отражение, но он требует, чтобы переменные объекта были того же типа, что и экземпляр, содержащий вызываемый метод. (Невозможно вызвать из числа double и передать параметр int, а также вызвать из числа int и передать параметр типа double)
Итак, если бы я мог просто привести их: один способ - от двойного к неизвестному типу (для этого мне пришлось бы использовать некоторое отражение) Другой способ - это двухэтапное приведение от объекта к неизвестному типу, а от этого к двойному .
Ограничения:
динамический не вариант (старый фреймворк)
Элементы Value1 поступают индивидуально «как объект» из внешнего неизменяемого метода.
1 ответ
Измените Value1
на double[]
. Если у вас есть object
для вставки в него (экземпляр short
, int
, double
и т. Д.), Используйте Convert.ToDouble(value)
, или если у вас есть известный short
или int
, он будет неявно преобразовываться в double
. Затем их можно сравнить с double
в Value2
.
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.
as object
(типа int, short или double). Вот почему я не могу просто поместить их в Value1. Это было бы то же самое, что попытаться привести объект к удвоению.Convert.ToDouble(value)
для двойных, коротких и целых чисел и заставить их быть двойными. Тогда Value1 может просто иметь типdouble[]
, как предлагает Тим.