Diskuze: porovnání dvou objektů

C# .NET .NET (C# a Visual Basic) porovnání dvou objektů American English version English version

Avatar
tomas
Člen
Avatar
tomas:

Ahoj, chci se zeptat jestli existuje nějaké elegantní řešení pro porovnání dvou objektů. Mám následující datovou třídu

public partial class sp_GetDeviceDetail_Result
    {
        public int id { get; set; }
        public string inventory_number { get; set; }
        public string name { get; set; }
        public string model { get; set; }
        public string serial_number { get; set; }
        public string product_number { get; set; }
        public Nullable<double> price_purchase { get; set; }
        public string currency { get; set; }
        public string document_number { get; set; }
        public Nullable<System.DateTime> date_purchase { get; set; }
        public Nullable<System.DateTime> date_elimination { get; set; }
        public string location { get; set; }
        public string note { get; set; }
    }

Mám dvě instance tohoto objektu, jedna je poslaná ze stránek a druhá je načtená z DB. Já potřebuji porovnat jejich hodnoty tak, abych rozpoznal, jestli došlo ke změně dat ve formuláři. Napadá mě projít smyčkou položku po položce a porovnat každou vlastnost samostatně, ale nezdá se mě to jako správný postup. Hlavně si myslím, že existuje elegantnější řešení a hlavně rychlejší. Můžete poradit? Je to webová aplikace Web form a používám c#. Děkuji.

 
Odpovědět 16.1.2015 13:52
Avatar
Daziko
Člen
Avatar
Odpovídá na tomas
Daziko:

Skus pouzit genericke rozhranie IComparable.

public class sp_GetDeviceDetail_Result : IComparable<sp_GetDeviceDetail_Result>
   {
       public int id { get; set; }
       public string inventory_number { get; set; }
       public string name { get; set; }
       public string model { get; set; }
       public string serial_number { get; set; }
       public string product_number { get; set; }
       public Nullable<double> price_purchase { get; set; }
       public string currency { get; set; }
       public string document_number { get; set; }
       public Nullable<System.DateTime> date_purchase { get; set; }
       public Nullable<System.DateTime> date_elimination { get; set; }
       public string location { get; set; }
       public string note { get; set; }

       public int CompareTo(sp_GetDeviceDetail_Result other)
       {
           if (id != other.id || inventory_number != other.inventory_number)
           {
               return 1;
           }
           else
           {
               return 0;
           }
       }
   }

ukazka ako pracuje :

static void Main(string[] args)
        {
            sp_GetDeviceDetail_Result result1 = new sp_GetDeviceDetail_Result(); // obj from db
            sp_GetDeviceDetail_Result result2 = new sp_GetDeviceDetail_Result(); // obj from page

            //result2.id = 25;

            int changed = result1.CompareTo(result2);

            if (changed == 1)
            {
                Console.WriteLine("something changed");
            }
            else
            {
                Console.WriteLine("object are equale");
            }

            Console.Read();
        }
 
Nahoru Odpovědět 16.1.2015 14:47
Avatar
Daziko
Člen
Avatar
Odpovídá na tomas
Daziko:

Alebo pouzi genericke rozhranie IEquatable. Priklad najdes tu

http://stackoverflow.com/questions/10454519/best-way-to-compare-two-complex-object
 
Nahoru Odpovědět 16.1.2015 14:59
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.