gpt4 book ai didi

c# - 等于不适用于结构?

转载 作者:行者123 更新时间:2023-11-30 19:02:16 25 4
gpt4 key购买 nike

由于极其可怕的原因,我在我的雇主申请中有这个结构。

我试图覆盖相等运算符,但出现错误 Error 9 Operator '==' cannot be applied to operands of type 'TR_St_DateTime' and 'TR_St_DateTime'

我错过了什么?

public struct TR_St_DateTime : IEquatable<TR_St_DateTime>
{
public int Year;
public int Month;
public int Day;
public int Hour;
public int Minute;
public int Second;

public TR_St_DateTime(DateTime time)
{
Day = time.Day;
Hour = time.Hour;
Minute = time.Minute;
Second = time.Second;
Month = time.Month;
Year = time.Year;
}

public override bool Equals(object obj)
{
TR_St_DateTime o = (TR_St_DateTime) obj;
return Equals(o);
}

public override int GetHashCode()
{
return Year ^ Month ^ Day ^ Hour ^ Minute ^ Second;
}

public override string ToString()
{
return String.Format("{0}/{1}/{2}", Day, Month, Year);
}

public bool Equals(TR_St_DateTime other)
{
return ((Day == other.Day) && (Month == other.Month) && (Year == other.Year) && (Minute == other.Minute) && (Hour == other.Hour) && (Second == other.Second));
}
}

更新:似乎 == 不起作用,但 Equals 起作用。

不需要在结构上实现Equals

最佳答案

您没有重载 == 运算符,这就是编译器提示的原因。你只需要写:

public static bool operator ==(TR_St_DateTime left, TR_St_DateTime right)
{
return left.Equals(right);
}

public static bool operator !=(TR_St_DateTime left, TR_St_DateTime right)
{
return !(left == right);
}

不过,我强烈建议您避免使用那些公共(public)字段。除非您小心,否则可变结构可能会导致许多意想不到的副作用。

(您还应该遵循 .NET 命名约定,如果调用 Equals(object) 方法并引用不同类型的实例,则返回 false,而不是无条件转换。)

关于c# - 等于不适用于结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15767665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com