You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否重写typeof()方法?自定义结构体需等效DateTime类型

结论:不可能让typeof(test) == typeof(DateTime)返回true

在C#里,每个自定义类型(包括你定义的test结构体)都是独立的类型,typeof运算符返回的是对应类型的唯一System.Type实例。test和DateTime是完全不同的两个类型,它们的Type实例永远不会相等,这个需求从语言层面无法实现。

替代方案:让结构体表现得和DateTime一样好用

如果你只是希望自定义结构体在使用体验上接近原生DateTime,可以通过以下方式实现:

  • 实现隐式/显式转换,让结构体和DateTime可以直接互相转换
  • 重载常用运算符(比如比较、加减运算符)
  • 重写ToString、Equals、GetHashCode等基础方法
  • 实现DateTime相关的接口(比如IComparable<Test>、IFormattable)

修改后的示例代码:

private struct Test
{
    private DateTime Value;

    public Test(DateTime value)
    {
        Value = value;
    }

    // 隐式转换:DateTime直接转Test
    public static implicit operator Test(DateTime value)
    {
        return new Test(value);
    }

    // 隐式转换:Test直接转DateTime
    public static implicit operator DateTime(Test test)
    {
        return test.Value;
    }

    // 重写ToString,和DateTime行为一致
    public override string ToString()
    {
        return Value.ToString();
    }

    // 重写Equals方法
    public override bool Equals(object obj)
    {
        return obj is Test test && Value.Equals(test.Value);
    }

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

    // 重载相等判断运算符
    public static bool operator ==(Test left, Test right)
    {
        return left.Equals(right);
    }

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

    // 重载比较运算符
    public static bool operator <(Test left, Test right)
    {
        return left.Value < right.Value;
    }

    public static bool operator >(Test left, Test right)
    {
        return left.Value > right.Value;
    }

    // 实现IComparable接口支持排序
    public int CompareTo(Test other)
    {
        return Value.CompareTo(other.Value);
    }
}

这样修改后,你可以像使用DateTime一样使用这个结构体:

// 直接赋值DateTime给Test
Test myTest = DateTime.Now;
// 直接把Test转成DateTime
DateTime date = myTest;
// 直接比较大小
bool isEarlier = myTest < DateTime.Now.AddHours(1);

内容的提问来源于stack exchange,提问作者user23366103

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 09:08:23