powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сложить два значаений которые находятся в переменных типа object.
25 сообщений из 34, страница 1 из 2
Сложить два значаений которые находятся в переменных типа object.
    #39190758
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

Подскажите, как правильно дописать такой код.

object v1 = 1.1;
object v2 = 2;
System.Type dataType = typeof(Double);

object v3 = Convert.ChangeType(v1, dataType) + Convert.ChangeType(v2, dataType);

Надо преобразовать и сложить несколько значений (если значения совместимы).
Ссылка на значения существует в виде object.
Тип требуемого результата храниться в переменной dataType.

Компилятор C# говорит:
Operator '+' cannot be applied to operands of type 'object' and 'object'

Наверно надо как-то из dataType получить указатель на оператор +.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190795
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А зачем возня с Convert.ChangeType ?
Почему не сразу Convert.ToDouble ?
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190896
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

С точки зрения алгоритма значение в dataType заранее не известно.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190917
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvС точки зрения алгоритма значение в dataType заранее не известно.
надеюсь, речь о числовых типах?
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190927
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190931
L.Otujktd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Преобразoвать в строку и использовать TryParse
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190947
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Код: c#
1.
2.
3.
4.
var v1 = 1.1;
var v2 = 2;

var v3 = v1 + v2;
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190968
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Такой код вызывает исключение на sumMethod.Invoke(
System.NullReferenceException occurred

Код: c#
1.
2.
3.
4.
5.
6.
      object v1 = 1.1;
      object v2 = 2;
      System.Type dataType = typeof(Double);
      MethodInfo sumMethod = dataType.GetMethod("op_Addition", BindingFlags.Static | BindingFlags.Public);

      object v3 = sumMethod.Invoke(null, new object[] { Convert.ChangeType(v1, dataType), Convert.ChangeType(v2, dataType) });
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190970
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2
Код: c#
1.
2.
3.
4.
var v1 = 1.1;
var v2 = 2;

var v3 = v1 + v2;




var работает только если заранее известны типы переменных.
В реальной программе типы заранее не известны.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190973
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybv,

Код: c#
1.
2.
3.
Func<dynamic, dynamic, dynamic> summator = (x, y) => {return x + y;};

Console.WriteLine(summator(v1, v2));
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190978
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
buser,

dynamic доступен только в версии C# 4.
Код, скрее всего, будет использоваться в более ранних версиях C#.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190982
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
object v1 = 1.1;
object v2 = 2;
if(v1 is Double && v2 is Double) Console.WriteLine((double)v1 + (double)v2); 
if(v1 is Double && v2 is Int32) Console.WriteLine((double)v1 + (Int32)v2); 
... и т.д. перебор всех возможных вариантов
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190988
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T
Код: c#
1.
и т.д. перебор всех возможных вариантов


это перебор :)
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190989
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvКод, скрее всего, будет использоваться в более ранних версиях C#.
это что, не учебное задание ????
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190990
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил это перебор :)
почему? Числовых типов немного, 4 типа - 16 условий.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190992
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИзопропил это перебор :)
почему? Числовых типов немного, 4 типа - 16 условий.
несколько больше -
sbyte->byte->short->ushort->int->uint->long->ulong->decimal->float->double

моделировать нужно стандартное приведение - https://msdn.microsoft.com/ru-ru/library/y5b434w4.aspx
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39190999
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima Tпропущено...

почему? Числовых типов немного, 4 типа - 16 условий.
несколько больше -
sbyte->byte->short->ushort->int->uint->long->ulong->decimal->float->double

моделировать нужно стандартное приведение - https://msdn.microsoft.com/ru-ru/library/y5b434w4.aspx
тогда все целочисленные можно привести к Int64
Код: c#
1.
if(v1 is Double && (v2 is Int32 || v2 is UInt32 ...)) Console.WriteLine((double)v1 + (Int64)v2); 


Или просто привести каждое слагаемое к Double
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191014
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tтогда все целочисленные можно привести к Int64
ulong проблему вызовет

Dima TИли просто привести каждое слагаемое к Double
рискуем потерять точность для long/ulong
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191057
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dmitrybv,

Вы бы описали всю задачу. Возможно объекты складвать не надо
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191169
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2,

Задача, создать агрегирующие функции для столбцов грида и вывести результат в футере.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191195
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно развить эту концепцию:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        static void Main(string[] args)
        {
            Console.WriteLine(Add(1, 2));
            Console.WriteLine(Add(2.5, 3.51));
        }

        static object Add(object o1, object o2)
        {
            var body = Expression.Convert(
                Expression.Add(
                    Expression.Constant(o1),
                    Expression.Constant(o2)
                ),
                typeof(object)
            );

            return Expression.Lambda<Func<object>>(body).Compile()();
        }
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191226
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvCat2,

Задача, создать агрегирующие функции для столбцов грида и вывести результат в футере.
у столбца есть тип?
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191249
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvТакой код вызывает исключение на sumMethod.Invoke(
System.NullReferenceException occurred
Потому что int/double/float не используют перегруженные операторы сложения, а используют поддерживаемые на уровне CLR встроенные IL-инструкции. Поэтому op_Addition у них в приниципе нет.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191411
dmitrybv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ИзопропилdmitrybvCat2,

Задача, создать агрегирующие функции для столбцов грида и вывести результат в футере.
у столбца есть тип?

Тип запрашивается через свойство PropertyDescriptor.PropertyType
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191418
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
dmitrybvCat2,

Задача, создать агрегирующие функции для столбцов грида и вывести результат в футере.
Зачем создавать, если есть готовые?
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сложить два значаений которые находятся в переменных типа object.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]