我需要在.net中执行此操作,因为此Date + Number代码来自转换后的旧VB6代码,并且这些代码未输入,因此我无法检测编译时间何时发生。所以我正在寻找一种解决方案,我不需要知道它何时出现在我的代码中。
DateTime date = DateTime.Now + 1
当我收到一个号码时,我将其作为日期中的日期加总,所以我开始制作这个:
public static DateTime operator +(DateTime c1, int c2)
{
return c1.AddDays(c2);
}
然而它会抛出此错误:
二元运算符的一个参数必须是包含类型
我如何获得这个Datetime + Int运算符?
选择正确答案后编辑:
我选择了@Marc Gravell的答案,因为他解释说我想要做的事情是不可能的,并且他提供了一个更清洁的解决方案,而不是铸造未知类型并且手动使用.AddDays
< / p>
如果您遇到同样的麻烦,因为您无法在编译类型中检测到这些无类型错误,@ Matt Wilko提供了一个很棒的线索,转向VB.Net制作的 Option Strict Off 从VB6转换为 On 。它不会解决问题,因为即使我在进行Number + Number操作时它也会检测到错误,但是在编译时发生Date + Number时会有很多帮助。解决了日期+数字问题后,我会再次将 Option Strict 转为 Off 。
谢谢你们两个人!
答案 0 :(得分:3)
我需要在.net
中执行此操作
坚韧。你不能 - 至少不能在C#中。有时正确的答案是“不”。编译器消息告诉您原因:运算符只能在所涉及的两种类型上声明,即在此场景中必须在int
或DateTime
上定义运算符。
例如,您可以在int
上添加一个扩展方法,以便您可以执行以下操作:
DateTime date = DateTime.Now + 1.Days();
通过:
public static TimeSpan Days(this int value) {
return TimeSpan.FromDays(value);
}
答案 1 :(得分:1)
您的VB6代码正在使用Recordset(我实际上建议您重新编写以首先使用ADO.NET) - 这会返回一个Object类型。
为了能够对它做任何事情,你需要把它投到日期:
//Simulate the read of the recordset field object
Object dateObject = DateTime.Now;
//cast the object to a date and add a day to it
DateTime date = (DateTime)(dateObject) + TimeSpan.FromDays(1);