C#扩展方法作为控件默认值会导致设计窗口出错

C#扩展方法作为控件默认值会导致设计窗口出错,c#,extension-methods,C#,Extension Methods,我正在尝试使用扩展方法将datetimepicker控件初始化为从今天开始的前一个工作日。但是,这会导致“我的表单设计”窗口显示错误,因为它找不到扩展方法 this.dateTimePicker1.Value = DateTime.Today.NextDay(); 您可以通过创建新的windows窗体、添加datetimepicker来快速复制此错误。然后创建以下新类以扩展DateTime以添加NextDay()方法: this.dateTimePicker1.Value = DateTime

我正在尝试使用扩展方法将datetimepicker控件初始化为从今天开始的前一个工作日。但是,这会导致“我的表单设计”窗口显示错误,因为它找不到扩展方法

this.dateTimePicker1.Value = DateTime.Today.NextDay();
您可以通过创建新的windows窗体、添加datetimepicker来快速复制此错误。然后创建以下新类以扩展DateTime以添加NextDay()方法:

this.dateTimePicker1.Value = DateTime.Today.NextDay();
最后在Form1.designer.cs中添加行

this.dateTimePicker1.Value = DateTime.Today.NextDay();
在datetimepicker1部分下。 (编辑:并使用.system;在顶部)

this.dateTimePicker1.Value = DateTime.Today.NextDay();
当您导航回表单设计窗口时,您应该会看到错误。请注意,这段代码构建良好并正确运行,datetimepicker在表单加载时显示明天的日期。如果将Form1.designer.cs中添加的行替换为

this.dateTimePicker1.Value = DateTime.Today.NextDay();
this.dateTimePicker1.Value = DateTime.Today.AddDays(1);
然后,在设计窗口中不会出现错误。这使我假设错误是因为windows窗体设计窗口无法看到ExtensionMethodDesignWindowTest命名空间

this.dateTimePicker1.Value = DateTime.Today.NextDay();
如何使窗体设计窗口能够看到我的扩展方法

this.dateTimePicker1.Value = DateTime.Today.NextDay();
谢谢 丹

this.dateTimePicker1.Value = DateTime.Today.NextDay();
顺便说一句,尽管我怀疑这是否重要,但这里有一些我正在使用的IDE版本信息: Microsoft Visual Studio 2010 版本10.0.30319.1 RTMRel Microsoft.NET框架
版本4.0.30319 RTMRel

您应该在表单1中添加名称空间
扩展方法设计窗口测试
,完成了吗

this.dateTimePicker1.Value = DateTime.Today.NextDay();
在designer.cs中添加:

this.dateTimePicker1.Value = DateTime.Today.NextDay();
using ExtensionMethodDesignWindowTest;

编辑

this.dateTimePicker1.Value = DateTime.Today.NextDay();
像这样修改您的代码,这样可以工作:

this.dateTimePicker1.Value = DateTime.Today.NextDay();
this.dateTimePicker1.Value = ExtensionMethodDesignWindowTest.DateTimeExtensions.NextDay(DateTime.Today);

您应该在表单1中添加名称空间
ExtensionMethodDesignWindowTest
,完成了吗

this.dateTimePicker1.Value = DateTime.Today.NextDay();
在designer.cs中添加:

this.dateTimePicker1.Value = DateTime.Today.NextDay();
using ExtensionMethodDesignWindowTest;

编辑

this.dateTimePicker1.Value = DateTime.Today.NextDay();
像这样修改您的代码,这样可以工作:

this.dateTimePicker1.Value = DateTime.Today.NextDay();
this.dateTimePicker1.Value = ExtensionMethodDesignWindowTest.DateTimeExtensions.NextDay(DateTime.Today);

通常,将自己的代码放在设计器中是不好的做法-VS可能会重新生成设计器代码,然后您将丢失更改

this.dateTimePicker1.Value = DateTime.Today.NextDay();
您应该能够从例如Form_Load ie调用扩展方法

this.dateTimePicker1.Value = DateTime.Today.NextDay();
this.dateTimePicker1.Value = DateTime.Today.NextDay();

通常,将自己的代码放在设计器中是不好的做法-VS可能会重新生成设计器代码,然后您将丢失更改

this.dateTimePicker1.Value = DateTime.Today.NextDay();
您应该能够从例如Form_Load ie调用扩展方法

this.dateTimePicker1.Value = DateTime.Today.NextDay();
this.dateTimePicker1.Value = DateTime.Today.NextDay();

我只有一个名称空间,即ExtensionMethodDesignWindowTest。因此Form1.cs和designer.cs等已经在该名称空间中。无论如何,我试着在顶部添加那一行,我担心这不会改变任何事情。感谢Arnaud的帮助,这确实消除了错误,但是它有点挫败了使用扩展方法的意义。KAJ的建议对我来说更有意义。我只有一个名称空间,即ExtensionMethodDesignWindowTest。因此Form1.cs和designer.cs等已经在该名称空间中。无论如何,我试着在顶部添加那一行,我担心这不会改变任何事情。感谢Arnaud的帮助,这确实消除了错误,但是它有点挫败了使用扩展方法的意义。KAJ的建议对我来说更有意义。通常,将自己的代码放在设计器中是一种不好的做法-VS可能会重新生成代码,并且您会丢失更改。你不能从Form_Load或类似的东西调用它吗?谢谢,这是一个很好的观点。它可以从形式负载完美地工作。如果你的回答是正确的,我会把它标记为正确的。一般来说,把你自己的代码放在设计器中是不好的做法-VS可能会重新生成它,你会丢失你的更改。你不能从Form_Load或类似的东西调用它吗?谢谢,这是一个很好的观点。它可以从形式负载完美地工作。如果你的回答是正确的,我会把它标记为正确的。