我试图在泛型方法中的开关上比较泛型类型参数.这对我的解决方案不起作用.原因是:参数必须是特定类型(bool,char,string,integral,enum).
public T testfunction<T, U>(U numb)
{
switch(numb){ //<-- error
}
....
}
Run Code Online (Sandbox Code Playgroud)
但它背后的意义是什么?如果参数是通用的并且我想进行比较,为什么它必须是类型定义的变量?
你想在switch语句中测试什么?当然你必须知道有关正在进入的物体类型的东西.
考虑一下:当您可以在方法中接受Product或Customer类型时,如何构造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:
}
....
}
Run Code Online (Sandbox Code Playgroud)