日期:2014-05-20  浏览次数:20885 次

C#函数ref类型参数的一个奇怪的问题

比如今天的日期是   2007/2/22,   理论(得到某一日期的Week开始日)上ListBox上应该输出2007/2/18,但是结果输出的仍然是2007/2/22!真的不明白,望指教~~

private   void   button7_Click(object   sender,   System.EventArgs   e)
{
DateTime   a=DateTime.Now;

GetWeekDate(DateTime.Now,ref   a);
listBox1.Items.Add(a.ToString());
listBox1.Items.Add(a.AddDays(3).ToString());



}

Private   void   GetWeekDate(DateTime   GivenDay,ref   DateTime   BeginDate) '得到某一天的Week开始日 {
int   a=0;
switch(GivenDay.DayOfWeek)
{
case     DayOfWeek.Friday:      
a=5;      
break;      
case   DayOfWeek.Monday:      
a=8;      
break;      
case   DayOfWeek.Saturday:      
a=6;      
break;      
case   DayOfWeek.Sunday:      
a=7;      
break;  
case   DayOfWeek.Thursday:      
a=4;      
break;
case   DayOfWeek.Tuesday:      
a=2;      
break;  
case   DayOfWeek.Wednesday:      
a=3;      
break;  
}

BeginDate=GivenDay;
BeginDate.AddDays(a*(-1));//返回的数并没有增加到(a*(-1))天


}



------解决方案--------------------
BeginDate=BeginDate.AddDays(a * (-1));//返回的数并没有增加到(a*(-1))天

*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码)

最新版本:20070212

http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
------解决方案--------------------
应该这么写: BeginDate = GivenDay.AddDays(a*(-1));
AddDays的结果是作为返回值返回的,而不是作用在调用该方法的类实例上.
------解决方案--------------------
低级错误,那楼主你想想这句
DateTime.Now.AddDays(365);
不就把今天改了?
------解决方案--------------------
BeginDate = GivenDay.AddDays(-a);

低级错误,跟ref无关.

另外上面的代码实在不敢恭维,有必要写这么复杂么? 根本用返回值就可以解决的场合干吗用引用参数呢?而且代码根本不用这么多.

private DateTime GetBeginDate(DateTime GivenDay)
{
return GivenDay.AddDays(1 - (int)GivenDay.DayOfWeek );
}

一行代码搞定.