将泛型作为参数传递给 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