c# - 反转对象或用减号将其标记为负数

标签 c# .net datetime enums

是否可以反转对象或将其标记为负数?

这是我想要实现的:

DateTime.Now.Add(-TimeUnits.Week)

这应该返回当前日期时间减去 7 天。

所以我必须在 Add 方法中检测传递的对象是否为负数!

我看过一个Struct,但我对它们的经验太少,无法判断这是否可能! 目前,我有一个枚举,当然非常有限。 我没有特别绑定(bind)到枚举,所以它可以是任何其他对象!

我的枚举 TimeUnits:

public enum TimeUnits
{
    Once = 0,
    Day = 1,
    Week = 2,
    Month = 3,
    Quarter = 4,
    Year = 5
}

我在 DateTime 上有一个扩展方法,我想将一个对象传递给方法 Add,如下所示:

private static DateTime? Add(this DateTime current, TimeUnits unitOfTime)
{
    switch (unitOfTime)
    {
        case TimeUnits.Once:
            return null;
        case TimeUnits.Day:
            return current.AddDays(1);
        case TimeUnits.Week:
            return current.AddDays(7);
        case TimeUnits.Month:
            return current.AddMonths(1);
        case TimeUnits.Quarter:
            return current.AddMonths(3);
        case TimeUnits.Year:
            return current.AddYears(1);
        default:
            throw new ArgumentOutOfRangeException("unitOfTime");
    }
}

最佳答案

严格来说,枚举类型不过是为数字定义命名常量的一种方式。换句话说:表达式 -((int(TimeUnit.Week) 只是另一种以更易读的方式编写文字 -2 的方式。

虽然在技术上完全可以“否定”这样的值(因为对于编译器来说它确实是一个 int),但您不应该这样做。从概念上讲,这是一个可怕的想法,它完全是对枚举概念的误用。 - 为您尝试做的事情使用简单的常量,或者如果可能,定义一个 Subtract() 方法。

关于c# - 反转对象或用减号将其标记为负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27366312/

相关文章:

.net - 如何使用流畅的 API 添加主键 - Entity Framework EF 4.x Code First

sql - 如何在SQL Server中将nvarchar类型转换为仅时间类型格式

c# - Microsoft 是否放弃了对数据库优先的支持?

c# - 如何视觉上连接2个圈子?

.net - 为什么 SerialPort 类没有 RIHolding 属性?

php - 如何在 PHP 中更新 timezonedb(更新时区信息)?

c++ - 是否可以在 C++ 中使用 DateTime 值?

c# - Linq lambda foreach

c# - WebAPI,将一个或集合对象发布到同一操作而不更改消息正文

c# - 子网掩码的正则表达式?