我有一个包含两个字符串的类。
我希望在引用对象时返回一个字符串。
代码段:
public class ABC
{
public string A = "first";
public string B = "second";
}
public class useABC
{
ABC obj;
if(obj == "first")
Console.writeLine("True");
}
我应该在ABC
课程中做什么才能打印“True”。
提前致谢。
答案 0 :(得分:1)
您可以覆盖隐式或显式运算符。这是一个MSDN article。
请注意,过多的隐式重载可能导致令人困惑或难以使用的类。
答案 1 :(得分:1)
我认为您希望覆盖等于运算符(==)。 以下是如何操作:请记住,您必须在两个订单中重载运算符。此外,编译器要求您同时重载!=。
public class ABS
{
public string A;
public string B;
public static bool operator ==(ABS obj, string val){return obj.A == val;}
public static bool operator !=(ABS obj, string val){return obj.A != val;}
public static bool operator ==(string val, ABS obj){return obj.A == val;}
public static bool operator !=(string val, ABS obj){return obj.A != val;}
}
以下代码对两个表达式都返回true:
ABS abs = new ABS();
abs.A = "What?";
Assert.IsTrue(abs == "What?"); // true
Assert.IsTrue("What?" == abs); // true
答案 2 :(得分:0)
如何实施IEquatable<string>
,以便您可以撰写ABC.Equals("first")
。
public class ABS : IEquatable<string>
{
string A, B;
public bool Equals(string other)
{
return A.Equals(other) || B.Equals(other);
}
}
以后
if( ABC.Equals("first") ) { Console.WriteLine("true"); }
然后您也可以覆盖==
运算符,但不建议用于类类型。与string
一样,建议使用.Equals()
方法检查是否相等。或者,您只需添加方法bool Contains(string other)
即可检查字符串是否在A
或B
。