我试图在通用方法内的开关上比较通用类型的参数。这对我的解决方案不起作用。原因:参数必须是特定类型(布尔,字符,字符串,整数,枚举)。
public T testfunction<T, U>(U numb)
{
switch(numb){ //<-- error
}
....
}
但是它背后的意义是什么?如果参数是通用的,并且我想进行比较,为什么它必须是类型定义的变量?
最佳答案
您想在switch语句中测试什么?当然,您必须了解即将传入的对象的类型。
考虑:当您可以在方法中接受“产品”或“客户”类型时,如何构造转换语句?您希望编译器为您做出什么逻辑选择?如果您希望编译器根据产品的价格选择一个操作,则不适用于Customer对象。但是,如果“产品”和“客户”都具有您要依赖的CreateDate字段,则可以将其提取到接口中并将其用作方法的一般约束。
向您的通用方法签名添加一个适当的约束,该约束封装了您对期望类型的了解,然后您将能够进行切换:
public interface ICreateDate {
public DateTime CreateDate { get; set; }
}
public T testfunction<T, U>(U numb) where U : ICreateDate
{
switch(numb.CreateDate.DayOfWeek){
case DayOfWeek.Monday:
}
....
}