我有2个班级:
public class Item {
//MyFields
}
public class ItemCapsule {
public Item MyItem { get; set; };
}
在代码的某处,我写了
ItemCapsule itemCapsule;
if (itemCapsule != null && itemCapsule.MyItem != null) {
//action
}
我可能想这样做:
ItemCapsule itemCapsule;
if (itemCapsule != null) {
//action
}
所以我在ItemCapsule
中创建了2个重载运算符的方法
public static bool operator ==(ItemCapsule capsule, ???? what to write ????)
{
return ???? what to write ????;
}
public static bool operator !=(ItemCapsule capsule, ???? what to write ????)
{
return ???? what to write ????;
}
但是,问题是我不知道如何编写上述两种方法。
我想做以下
ItemCapsule != null
实际上假设要执行以下操作
ItemCapsule != null && ItemCapsule.MyItem != null
我该怎么办?
答案 0 :(得分:2)
通常你也会为equals
执行重载。
喜欢这样
public static bool operator ==(ItemCapsule x, ItemCapsule y)
{
bool xnull, ynull;
xnull = Object.ReferenceEquals(x, null);
ynull = Object.ReferenceEquals(y, null);
if (xnull && ynull) return true;
if (xnull || ynull) return false;
return x.Equals(y);
}
public static bool operator !=(ItemCapsule x, ItemCapsule y)
{
bool xnull, ynull;
xnull = Object.ReferenceEquals(x, null);
ynull = Object.ReferenceEquals(y, null);
if (xnull && ynull) return false;
if (xnull || ynull) return true;
return !x.Equals(y);
}
public override bool Equals(object obj)
{
if (obj == null) return false;
return ((ItemCapsule )obj).Id == Id;
}
答案 1 :(得分:0)
某些扩展方法可以更好地工作。运算符重载应该是绝对最后的资源,因为它使您的代码对任何人都不可理解,包括您未来的自我。
public static class ExtensionMethods {
public static bool IsNullOrEmpty(this ItemCapsule item) {
return (item != null && item.MyItem != null);
}
public static bool Equals(this ItemCapsule firstItem, ItemCapsule secondItem) {
return (firstItem.MyItem.Equals(secondItem.MyItem)); //see below
}
public static bool Equals(this Item firstItem, Item secondItem) {
// perform the comparison of your 'Item' objects here
}
}
我也喜欢类中建议的IsEmpty
字段,因为需要更少的代码。
答案 2 :(得分:-2)
这会对你有所帮助:
public static bool operator == (ItemCapsule capsule1, ItemCapsule capsule2)
{
return capsule2 != null && (capsule1 != null && capsule1.MyItem == capsule2.MyItem);
}
public static bool operator !=(ItemCapsule capsule1, ItemCapsule capsule2)
{
return capsule2 != null && (capsule1 != null && capsule1.MyItem != capsule2.MyItem);
}