powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сложить два значаений которые находятся в переменных типа object.
34 сообщений из 34, показаны все 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
Сложить два значаений которые находятся в переменных типа object.
    #39191462
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2dmitrybvCat2,

Задача, создать агрегирующие функции для столбцов грида и вывести результат в футере.
Зачем создавать, если есть готовые?
ещё скажи что имеет смысл использовать типизированный источник данных
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191572
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
ИзопропилCat2пропущено...

Зачем создавать, если есть готовые?
ещё скажи что имеет смысл использовать типизированный источник данных
А в Entity Framework нет таких? Бедняжки
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191732
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2Изопропилпропущено...

ещё скажи что имеет смысл использовать типизированный источник данных
А в Entity Framework нет таких? Бедняжки
А это тут при чём? В качестве источника может что угодно выступать.

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

А в Entity Framework нет таких? Бедняжки
А это тут при чём? В качестве источника может что угодно выступать.

Задача расширить функционал компонента без привязки к источнику.
Не лучшая идея, так как DataGridView наследуется ОЧЕНЬ плохо.

Если уж на то пошло, то лучше использовать идею

L.OtujktdПреобразoвать в строку и использовать TryParse

Так как свойство ячейки FormatedValue и так является строкой.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191856
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВ качестве источника может что угодно выступать.
у колонки тип то есть? или эксель внатуре?
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191868
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cat2skyANAпропущено...

А это тут при чём? В качестве источника может что угодно выступать.

Задача расширить функционал компонента без привязки к источнику.
Не лучшая идея, так как DataGridView наследуется ОЧЕНЬ плохо.
Это как: наследуется ОЧЕНЬ плохо? :)
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39191869
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvCat2,

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

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
/// <summary>
/// Определяет сумму значений в колонке
/// </summary>
/// <param name="columnIndex">Индекс колонки</param>
/// <param name="selectedRowOnly">
/// Признак того, что необходимо учитывать только выделенные строки.
/// Если выделенных строк нет, то возвращается сумма по всем строкам.
/// </param>
public virtual decimal GetColumnSum(string columnIndex, bool selectedRowOnly)
{
    Type dataType = GetColumnType(columnIndex);

    if (dataType == typeof(Int16) || dataType == typeof(Int32) || dataType == typeof(Int64) ||
        dataType == typeof(Decimal) || dataType == typeof(Double) || dataType == typeof(Single))
    {
        int selectedRowCount = 0;
        decimal selectedRowSum = 0m;
        decimal totalRowSum = 0m;
		
        for (int rowIndex = 0; rowIndex < GetRowCount(); rowIndex++)
        {
            object value = GetCellValue(columnIndex, rowIndex);
            decimal valueAsDecimal = value == null ? 0m : Convert.ToDecimal(value);
			
            if (selectedRowOnly && IsSelected(rowIndex))
            {        
                selectedRowSum += valueAsDecimal;
                selectedRowCount++;
            }
			
            totalRowSum += valueAsDecimal;
        }
		
        return selectedRowOnly && selectedRowCount > 0 ? selectedRowSum : totalRowSum;
    }
	
    return 0m;
}


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

Не лучшая идея, так как DataGridView наследуется ОЧЕНЬ плохо.
Это как: наследуется ОЧЕНЬ плохо? :)

Алексей КhVosttпропущено...

да какие проблемы, я не понимаю

Windows Forms Visual Inheritance В WinForms этой штукой лучше не пользоваться. Многие "сложные" контролы, вроде ToolStrip, DataGridView и т. п., визуальное наследование не поддерживают.
...
Рейтинг: 0 / 0
Сложить два значаений которые находятся в переменных типа object.
    #39192747
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitrybvНадо преобразовать и сложить несколько значений
Код: c#
1.
2.
3.
4.
public static decimal Evaluate(object v1, object v2)
{
    return Convert.ToDecimal(new System.Data.DataTable().Compute(string.Format("{0} + {1}", v1, v2), string.Empty));
}
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Сложить два значаений которые находятся в переменных типа object.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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