2 объекта того же типа возвращает true, когда! = Проверено - PullRequest
0 голосов
/ 29 августа 2018

Я использую model.GetType (). GetProperties () с foreach для сравнения свойств 2 объектов одного класса. как это

 foreach (var item in kayit.GetType().GetProperties())
                    {
                        var g = item.GetValue(plu);
                        var b = item.GetValue(kayit);
                        if (g is string && b is string&& g!=b)
                        {
                                a += item.Name + "*";

                        }
                        else if (g is DateTime&& b is DateTime&& g!=b)
                        {
                            a += item.Name + "*";
                        }


                    }

Но проблема в том, что даже если они имеют одно и то же значение, g! = B всегда возвращает true. Я использовал точку останова, чтобы доказать это, и они буквально одно и то же. На самом деле я беру значение, помещая его в текстовое поле, затем создаю другой класс после нажатия кнопки и сопоставления, чтобы увидеть измененные свойства. Так что, даже если я ничего не изменяю, он не читает mas равные. Может ли кто-нибудь помочь мне в этом, пожалуйста?

больше информации: Я получаю плагин из базы данных и заполняю свой контроль им:

            txtorder.Text = plu.OrderNo;
            dtporder.Value = nulldate(plu.OrderDate);            
            dtp1fit.Value = nulldate(plu.FirstFitDate);
            dtp1yorum.Value = nulldate(plu.FirstCritDate);
            dtp2fit.Value = nulldate(plu.SecondFitDate);
            dtp2yorum.Value = nulldate(plu.SecondCritDate);
            dtpsizeset.Value = nulldate(plu.SizeSetDate);
            dtpsizesetok.Value = nulldate(plu.SizeSetOkDate);
            dtpkumasplan.Value = nulldate(plu.FabricOrderByPlan);
            txtTedarikci.Text = plu.Fabric_Supplier;
            dtpkumasFP.Value = nulldate(plu.FabricOrderByFD);
            dtpfabarrive.Value = nulldate(plu.FabricArrive);
            dtpbulk.Value = nulldate(plu.BulkFabricDate);
            dtpbulkok.Value = nulldate(plu.BulkConfirmDate);
            dtpaccessory.Value = nulldate(plu.AccessoriesDate);
            dtpaccessoryarrive.Value = nulldate(plu.AccessoriesArriveDate);
            dtpcutok.Value = nulldate(plu.ProductionStartConfirmation);
            dtpcutstart.Value = nulldate(plu.ProductionStart);
            dtpshipmentdate.Value = nulldate(plu.ShipmentDate);
            dtpshipmentsample.Value = nulldate(plu.ShipmentSampleDate);
            dtpshippedon.Value = nulldate(plu.Shippedon);

nulldate - это просто метод, в котором я меняю нулевые значения на значения по умолчанию. И это то, что я делаю после нажатия кнопки:

 var kayit = new uretim();
  kayit.OrderNo = txtorder.Text.ToUpper();
                kayit.OrderDate = vdat(dtporder.Value);
                kayit.FirstFitDate = vdat(dtp1fit.Value);
                kayit.FirstCritDate = vdat(dtp1yorum.Value);
                kayit.SecondFitDate = vdat(dtp2fit.Value);
                kayit.SecondCritDate = vdat(dtp2yorum.Value);
                kayit.SizeSetDate = vdat(dtpsizeset.Value);
                kayit.SizeSetOkDate = vdat(dtpsizesetok.Value);
                kayit.FabricOrderByPlan = vdat(dtpkumasplan.Value);
                kayit.Fabric_Supplier = txtTedarikci.Text;
                kayit.FabricOrderByFD = vdat(dtpkumasFP.Value);
                kayit.FabricArrive = vdat(dtpfabarrive.Value);
                kayit.BulkFabricDate = vdat(dtpbulk.Value);
                kayit.BulkConfirmDate = vdat(dtpbulkok.Value);
                kayit.AccessoriesDate = vdat(dtpaccessory.Value);
                kayit.AccessoriesArriveDate = vdat(dtpaccessoryarrive.Value);
                kayit.ProductionStartConfirmation = vdat(dtpcutok.Value);
                kayit.ProductionStart = vdat(dtpcutstart.Value);
                kayit.ShipmentDate = vdat(dtpshipmentdate.Value);
                kayit.ShipmentSampleDate = vdat(dtpshipmentsample.Value);
                kayit.Shippedon = vdat(dtpshippedon.Value);
                kayit.Status = true;
                kayit.WrittenDate = DateTime.Now;
                kayit.GuidKey = plu.GuidKey != null ? plu.GuidKey : Guid.NewGuid().ToString("N");

Я доказал точкой останова, что значения на самом деле одинаковы. Но проверка! = Возвращает значение true.

1 Ответ

0 голосов

Когда вы делаете

g != b

компилятор не знает, что эти объекты являются строками для сравнения, поэтому он сравнивает их ссылки. Вы можете сделать:

g.Equals(b) //be carefull if one of them is null

или

g.ToString() != b.ToString()

EDIT

Вы можете сравнить их после проверки типа:

if (g is string && b is string)
{
    if( g.ToString() != b.ToString() ){

    }                    

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...