【问题标题】:Trying to Compare Instance of Class Directly to a String尝试将类的实例直接与字符串进行比较
【发布时间】:2013-01-14 15:17:21
【问题描述】:

我怎样才能制作这样的课程:

public class Foo
{
    private string m_value;
    public string Value { get { return m_value; } set { m_value = value; } }
    public Foo()
    {
        m_value = "";
    }
}

可以直接与字符串进行比较,而无需访问它的 .Value 属性,这样我就可以做到:

Foo m_foo = new Foo();
m_foo = "someString";

if(m_foo == "someString")
{
    Console.Writeline("It Worked!");
}

我不确定这是否可能。

【问题讨论】:

  • 我相信有一种方法可以定义你的类的比较方式,但我建议还是使用.Value 属性

标签: c# string operator-overloading


【解决方案1】:

您可以重载 == 运算符(编译器还要求您重载 '!='、'Equals' 和 'GetHashCode')

public class Foo
{
  private string m_value;
  public string Value { get { return m_value; } set { m_value = value; } }
  public Foo()
  {
    m_value = "";
  }

  public override bool Equals(object obj)
  {
    return this.Value == obj.ToString();
  }

  public override int GetHashCode()
  {
    return Value.GetHashCode();
  }

  public static bool operator ==(Foo a, string b)
  {
    return a.Value == b;
  }

  public static bool operator !=(Foo a, string b)
  {
    return a.Value != b;
  }
}

我不确定所有这些努力是否值得,你什么时候可以写:

if(m_foo.Value == "someString")

【讨论】:

  • 太好了,我会尝试...原因是这样我可以拥有一些行为和使用非常像字符串作为其他类中的属性的东西,但可以被过滤掉通过Type 比较,而不是在PropertyInfo.Name 上使用Regex.IsMatch(),这更容易出现我的人为错误和拼写错误。这个其他类也有 String 属性,所以我认为这将是在任何给定时间过滤我想要的更好的方法。
猜你喜欢
  • 1970-01-01
  • 2018-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多