将泛型作为参数传递给 DateTime 的构造函数
Passing a generic as parameter to DateTime's constructor
如您所知,PCL 不支持 PersianCalendar 或 GregorianCalendar class,所以我使用泛型来实现这一点,在这种情况下,消费者可以将日历传递给 class:
public class DateConvertor<TCalendar> where TCalendar : Calendar
{
public DateConvertor()
{
this.CurentCalendar = Activator.CreateInstance<TCalendar>();
}
public TCalendar CurentCalendar
{
get;
private set;
}
public DateTime GetDate(string date)
{
//....
var newDate = new DateTime(year, month, day, hour, minute, 0);
return newDate;
}
}
所以我需要将 PersianCalendar 的新实例传递给 DateTime 的构造函数:
var newDate = new DateTime(year, month, day, hour, minute, 0, new PersianCalendar());
现在我的问题是我该怎么做?例如这样的事情:
var newDate = new DateTime(year, month, day, hour, minute, 0, CurentCalendar);
我可以将泛型类型作为参数传递给 DateTime 的构造函数吗?
更新:
似乎 DateTime class 没有用于在便携式 Class 库中接受新日历实例的签名:
public DateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
Calendar calendar
)
如您所见,DateTime
在 PCL 中没有您想要的构造函数。但是,您可以使用 Calendar.ToDateTime
:
return CurrentCalendar.ToDateTime(year, month, day, hour, minute, 0, 0);
顺便说一句,您可以将通用约束更改为包含 new()
,然后只需调用构造函数:
public class DateConverter<TCalendar> where TCalendar : Calendar, new()
{
public DateConverter()
{
this.CurrentCalendar = new TCalendar();
}
}
或者使用我的 Noda Time 项目,它以一种更令人愉快的方式支持其他日历,IMO - 例如a LocalDateTime
"knows" 它所属的日历,并允许您转换为另一个日历中的 LocalDateTime
等
如您所知,PCL 不支持 PersianCalendar 或 GregorianCalendar class,所以我使用泛型来实现这一点,在这种情况下,消费者可以将日历传递给 class:
public class DateConvertor<TCalendar> where TCalendar : Calendar
{
public DateConvertor()
{
this.CurentCalendar = Activator.CreateInstance<TCalendar>();
}
public TCalendar CurentCalendar
{
get;
private set;
}
public DateTime GetDate(string date)
{
//....
var newDate = new DateTime(year, month, day, hour, minute, 0);
return newDate;
}
}
所以我需要将 PersianCalendar 的新实例传递给 DateTime 的构造函数:
var newDate = new DateTime(year, month, day, hour, minute, 0, new PersianCalendar());
现在我的问题是我该怎么做?例如这样的事情:
var newDate = new DateTime(year, month, day, hour, minute, 0, CurentCalendar);
我可以将泛型类型作为参数传递给 DateTime 的构造函数吗?
更新:
似乎 DateTime class 没有用于在便携式 Class 库中接受新日历实例的签名:
public DateTime(
int year,
int month,
int day,
int hour,
int minute,
int second,
Calendar calendar
)
如您所见,DateTime
在 PCL 中没有您想要的构造函数。但是,您可以使用 Calendar.ToDateTime
:
return CurrentCalendar.ToDateTime(year, month, day, hour, minute, 0, 0);
顺便说一句,您可以将通用约束更改为包含 new()
,然后只需调用构造函数:
public class DateConverter<TCalendar> where TCalendar : Calendar, new()
{
public DateConverter()
{
this.CurrentCalendar = new TCalendar();
}
}
或者使用我的 Noda Time 项目,它以一种更令人愉快的方式支持其他日历,IMO - 例如a LocalDateTime
"knows" 它所属的日历,并允许您转换为另一个日历中的 LocalDateTime
等