我有兩個相同型別的復雜物件。我想檢查這兩個物件之間是否有任何區別。我有兩種選擇來實作這一點,要么使用 JsonConvert.SerializeObject 將這兩個物件都轉換為字串并比較字串
var existingData = JsonConvert.SerializeObject(objOld);
var newData = JsonConvert.SerializeObject(objNew);
return existingData == newData;
另一種選擇是使用反射并回圈遍歷所有屬性,如下所示。
protected bool MatchObject(object newObj, object oldObj)
{
Type currentType = newObj.GetType();
PropertyInfo[] props = currentType.GetProperties();
bool isSameObject = true;
foreach (var prop in props)
{
var i = prop.GetValue(newObj);
var f = prop.GetValue(oldObj);
if (!object.Equals(i, f))
{
isSameObject = false;
break;
}
}
return isSameObject;
}
從性能的角度來看,上述哪種方法更有效?
uj5u.com熱心網友回復:
啊。面對“將其序列化為字串并使用字串比較”和“使用反射”之間,我想我會勾選“以上都不是”框
您是否考慮過使用 arecord而不是 a class?編譯器為您撰寫了所有必要的代碼,以根據記錄的屬性值確定記錄的相等性,因此您要做的就是測驗記錄實體的相等性
uj5u.com熱心網友回復:
替代的現成選項是斷言框架。例如“FluentAssertions”可以比較物件圖
newObject.Should().BeEquivalentTo(oldObject);
如果 object 和它們的屬性不相等,上面的行將拋出例外。
物件圖比較
請注意,這只是 NuGet 提供的另一個庫,因此您也可以在“生產”代碼中使用;)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/364416.html
標籤:C# 。网 asp.net核心 .net核心 json转换
上一篇:不顯示下拉選單
下一篇:將安全驗證碼存盤在Redis中
