VB: Как организовать сравнение двух наборов записей?
От: ZAMUNDA Земля для жалоб и предложений
Дата: 20.03.11 23:54
Оценка:
Добрый %daytime% всем.
Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений.
Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос :) а есть что-нибудь стандартное в CLR?

Заранее спасибо.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: VB: Как организовать сравнение двух наборов записей?
От: _FRED_ Черногория
Дата: 21.03.11 04:45
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений.

ZAM>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?

"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части? Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно.
Help will always be given at Hogwarts to those who ask for it.
Re: VB: Как организовать сравнение двух наборов записей?
От: baranovda Российская Империя  
Дата: 21.03.11 06:54
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Добрый %daytime% всем.

ZAM>Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений.
ZAM>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?

ZAM>Заранее спасибо.


System.Data.DataRowComparer

Compares two DataRow objects for equivalence by using value-based comparison.
Re[2]: VB: Как организовать сравнение двух наборов записей?
От: _FRED_ Черногория
Дата: 21.03.11 07:07
Оценка:
Здравствуйте, baranovda, Вы писали:

ZAM>>Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений.

ZAM>>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?

B>System.Data.DataRowComparer

B>Compares two DataRow objects for equivalence by using value-based comparison.

Он не умеет выделенного.
Help will always be given at Hogwarts to those who ask for it.
Re[3]: VB: Как организовать сравнение двух наборов записей?
От: baranovda Российская Империя  
Дата: 21.03.11 07:09
Оценка:
Здравствуйте, _FRED_, Вы писали:

B>>System.Data.DataRowComparer

B>>Compares two DataRow objects for equivalence by using value-based comparison.

_FR>Он не умеет выделенного.


Выдрать рефлектором и научить, делов-то
Re[4]: VB: Как организовать сравнение двух наборов записей?
От: _FRED_ Черногория
Дата: 21.03.11 07:13
Оценка:
Здравствуйте, baranovda, Вы писали:

B>>>System.Data.DataRowComparer

B>>>Compares two DataRow objects for equivalence by using value-based comparison.
_FR>>Он не умеет выделенного.

B>Выдрать рефлектором и научить, делов-то


Тогда и самому всё написать совсем не сложно

Плюс, тот компаратор не учитывает имена полей и идёт строго по порядку, а это может быть важно.
Help will always be given at Hogwarts to those who ask for it.
Re[2]: VB: Как организовать сравнение двух наборов записей?
От: ZAMUNDA Земля для жалоб и предложений
Дата: 21.03.11 07:30
Оценка:
Здравствуйте, _FRED_, Вы писали:

ZAM>>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?

_FR>"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части?
Лучше, кнешн, для всего; но можно и для чего-нибудь. Хотя бы для двух Object.

_FR>Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно.

Но там ж будет с определённого момента известно, что за тип сидит за каждым Object. Можно будет сделать чтоб тип аргументов не сравнивался, а сразу шло преобразование к определённому типу и сравнение? Я вот посматриваю на IComparer — есть его стандартные реализации?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[5]: VB: Как организовать сравнение двух наборов записей?
От: ZAMUNDA Земля для жалоб и предложений
Дата: 21.03.11 07:34
Оценка:
Здравствуйте, _FRED_, Вы писали:
B>>>>System.Data.DataRowComparer
_FR>>>Он не умеет выделенного.
B>>Выдрать рефлектором и научить, делов-то
Я таких умных слов не знаю.

_FR>Тогда и самому всё написать совсем не сложно

_FR>Плюс, тот компаратор не учитывает имена полей и идёт строго по порядку, а это может быть важно.
Именно так.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[3]: VB: Как организовать сравнение двух наборов записей?
От: baranovda Российская Империя  
Дата: 21.03.11 07:41
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

_FR>>Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно.

ZAM>Но там ж будет с определённого момента известно, что за тип сидит за каждым Object. Можно будет сделать чтоб тип аргументов не сравнивался, а сразу шло преобразование к определённому типу и сравнение? Я вот посматриваю на IComparer — есть его стандартные реализации?

Comparer, Comparer<T>
Re[3]: VB: Как организовать сравнение двух наборов записей?
От: _FRED_ Черногория
Дата: 21.03.11 07:51
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>>>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?

_FR>>"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части?
ZAM>Лучше, кнешн, для всего; но можно и для чего-нибудь. Хотя бы для двух Object.

  1. Надо заняться анализом, определив для себя, какие типы с какими и как нужно уметь сравнивать. Плясать от этого списка.
  2. Завести, например, словарь IDictionary<Tuple<Type, Type>, Func<object, object, bool>> и если типы лперандов не равны, пытаться отыскать компаратор в этой таблице. Тут вариантом может быть уже много.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: VB: Как организовать сравнение двух наборов записей?
От: ZAMUNDA Земля для жалоб и предложений
Дата: 21.03.11 12:40
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>

    _FR>
  1. Надо заняться анализом, определив для себя, какие типы с какими и как нужно уметь сравнивать. Плясать от этого списка.
    _FR>
  2. Завести, например, словарь IDictionary<Tuple<Type, Type>, Func<object, object, bool>> и если типы лперандов не равны, пытаться отыскать компаратор в этой таблице. Тут вариантом может быть уже много.
    _FR>

Да тут-то я уже наплясал. Начал делать такую штуковину:
    MustInherit Class CCmpBase
        Public MustOverride Function Invoke(ByVal objLeft As Object, ByVal objRight As Object) As Boolean
    End Class

    Class CCmpInt32
        Inherits CCmpBase

        Public Overrides Function Invoke(ByVal objLeft As Object, ByVal objRight As Object) As Boolean
            Dim intLeft As Int32 = CType(objLeft, Int32)
            Dim intRight As Int32 = CType(objRight, Int32)

            Return (intLeft = intRight)
        End Function
    End Class
и задумался на тему, а нет-ли готового чего.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.