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 );
}
一行代码搞定.