c# - Check if property type overloads == operator with Mono.Cecil -
i using mono.cecil write program injects il code property setters. problem need use equality operator on property within il. example:
public class someclass { private int _property1; public int property1 { { return _property1; } set { _property1 = value; } } private string _property2; public string property2 { { return _property2; } set { _property2 = value; } } } and il code need inject in setters like:
if (value != _property1) { //do stuff } same goes property2. problem property2 of type string overloads == operator , in il instead of ceq code need call op_equality. question is: there way check if == operator overridden on property type using mono.cecil?
well, it's easy. i've created class
public class foo { public static bool operator ==(foo a, foo b) { if (system.object.referenceequals(a, b)) { return true; } if (((object)a == null) || ((object)b == null)) { return false; } return == b; } public static bool operator !=(foo a, foo b) { return !(a == b); } } compiled , looked @ in mono.cecil
assemblydefinition assembly = assemblydefinition.readassembly(path); foreach (var item in assembly.modules) { foreach (var type in item.types) { foreach (var method in type.methods) { if (method.isstatic && method.isspecialname && method.ispublic && method.name.contains("op_equality")) { //that type overides == operator } } } }
Comments
Post a Comment