相关疑难解决方法(0)

如何快速检查两个数据传输对象在C#中是否具有相同的属性?

我有这些数据传输对象:

public class Report 
{
    public int Id { get; set; }
    public int ProjectId { get; set; }
    //and so on for many, many properties.
}
Run Code Online (Sandbox Code Playgroud)

我不想写

public bool areEqual(Report a, Report b)
{
    if (a.Id != b.Id) return false;
    if (a.ProjectId != b.ProjectId) return false;
    //Repeat ad nauseum
    return true;
}
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法来测试两个只有属性的对象是否具有相同的值(每个属性不需要一行代码或一个逻辑表达式?)

切换到结构不是一种选择.

c# equals dto

26
推荐指数
2
解决办法
7560
查看次数

将对象文字提供给ILGenerator

Food obj = ...;
ILGenerator gen = (...).GetILGenerator();
gen.Emit( ?? obj ?? ); // replace this 
gen.Emit(OpCodes.Call, typeof(Person).GetMethod("Eat"));
Run Code Online (Sandbox Code Playgroud)

显然不可能干净地将obj推到评估堆栈上,但我对丑陋的黑客持开放态度,这可能会影响可移植性.ModuleBuilder.DefineInitializedData允许在.sdata中存储System.Byte [].有任何想法吗?

编辑:生成的方法作为新程序集的一部分发出.

c# cil reflection.emit

5
推荐指数
1
解决办法
1520
查看次数

标签 统计

c# ×2

cil ×1

dto ×1

equals ×1

reflection.emit ×1