Добрый %daytime% всем.
Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений.
Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос :) а есть что-нибудь стандартное в CLR?
Заранее спасибо.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>Мне надо сравнить два набора записей. Т.е. на вход много раз подряд две, грубо говоря, DataRow а на выходе "равно/неравно". Мне, конечно, нехочется каждый раз смотреть типы полей, а построить перед началом цикла, некий объект "сравниватель". Причём "сравниватель" должен быть строго или несторого типизированным: т.е. по уметь преобразовывать типы сравниваемых значений. ZAM>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR?
"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части? Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно.
Help will always be given at Hogwarts to those who ask for it.
Re: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, 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: Как организовать сравнение двух наборов записей?
Здравствуйте, 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: Как организовать сравнение двух наборов записей?
Здравствуйте, _FRED_, Вы писали:
B>>System.Data.DataRowComparer B>>Compares two DataRow objects for equivalence by using value-based comparison.
_FR>Он не умеет выделенного.
Выдрать рефлектором и научить, делов-то
Re[4]: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, 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: Как организовать сравнение двух наборов записей?
Здравствуйте, _FRED_, Вы писали:
ZAM>>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR? _FR>"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части?
Лучше, кнешн, для всего; но можно и для чего-нибудь. Хотя бы для двух Object.
_FR>Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно.
Но там ж будет с определённого момента известно, что за тип сидит за каждым Object. Можно будет сделать чтоб тип аргументов не сравнивался, а сразу шло преобразование к определённому типу и сравнение? Я вот посматриваю на IComparer — есть его стандартные реализации?
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[5]: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, _FRED_, Вы писали: B>>>>System.Data.DataRowComparer _FR>>>Он не умеет выделенного. B>>Выдрать рефлектором и научить, делов-то
Я таких умных слов не знаю.
_FR>Тогда и самому всё написать совсем не сложно _FR>Плюс, тот компаратор не учитывает имена полей и идёт строго по порядку, а это может быть важно.
Именно так.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re[3]: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, ZAMUNDA, Вы писали:
_FR>>Есть Object.Equals(object, object) и более вроде как из стандартного ничего и не нужно. ZAM>Но там ж будет с определённого момента известно, что за тип сидит за каждым Object. Можно будет сделать чтоб тип аргументов не сравнивался, а сразу шло преобразование к определённому типу и сравнение? Я вот посматриваю на IComparer — есть его стандартные реализации?
Comparer, Comparer<T>
Re[3]: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, ZAMUNDA, Вы писали:
ZAM>>>Я хочу писать велосипед, который будет массивом интерейсов, которые будут для каждого базового типа иметь свою реализацию. Внимание вопрос а есть что-нибудь стандартное в CLR? _FR>>"что-нибудь стандартное" для чего именно? Для всего понаписанного? Для какой-то части? ZAM>Лучше, кнешн, для всего; но можно и для чего-нибудь. Хотя бы для двух Object.
Надо заняться анализом, определив для себя, какие типы с какими и как нужно уметь сравнивать. Плясать от этого списка.
Завести, например, словарь IDictionary<Tuple<Type, Type>, Func<object, object, bool>> и если типы лперандов не равны, пытаться отыскать компаратор в этой таблице. Тут вариантом может быть уже много.
Help will always be given at Hogwarts to those who ask for it.
Re[4]: VB: Как организовать сравнение двух наборов записей?
Здравствуйте, _FRED_, Вы писали:
_FR> _FR>Надо заняться анализом, определив для себя, какие типы с какими и как нужно уметь сравнивать. Плясать от этого списка. _FR>Завести, например, словарь 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) Козьма Прутков