我试图在通用方法内的开关上比较通用类型的参数。这对我的解决方案不起作用。原因:参数必须是特定类型(布尔,字符,字符串,整数,枚举)。

    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:

        }
        ....
    }

10-06 02:33