C#简单类型和通用类型

C#简单类型和通用类型,c#,types,switch-statement,C#,Types,Switch Statement,我想对泛型类型做不同的事情,因为它是字节数组、int等 public void GenericType<T>(T Input) { switch (typeof(T)) { case (typeof(byte[])): break; case (typeof(int)): case (typeof(float)):

我想对泛型类型做不同的事情,因为它是字节数组、int等

    public void GenericType<T>(T Input)
    {
        switch (typeof(T))
        {
            case (typeof(byte[])):
                break;
            case (typeof(int)):
            case (typeof(float)):
            case (typeof(long)):
                break;
            case (typeof(string)):
                break;
            default:
                throw new Exception("Type Incompatability Error");
                break;
        }
    }

Sandbox.cs(12,13): error CS0151: A switch expression of type `System.Type' cannot be converted to an integral type, bool, char, string, enum or nullable type
public void GenericType(T输入)
{
开关(类型(T))
{
大小写(typeof(byte[]):
打破
案例(类型(int)):
案例(类型(浮动)):
案例(类型(长)):
打破
大小写(字符串的类型):
打破
违约:
抛出新异常(“类型不兼容错误”);
打破
}
}
Sandbox.cs(12,13):错误CS0151:无法将“System.type”类型的开关表达式转换为整型、bool、char、string、enum或可为null的类型
加:

我的特定案例有一些通用代码和一些特定代码。我也有一个,我实际上没有传递一个T变量。到目前为止,如果存在一个变量,解决方案是有效的

    public void GenericType<T>()
public void GenericType()
由于经验不丰富,C#的最佳实践是什么


谢谢。

你可以试试类似的东西

if (Input is int i) { DoSomething(i) ; }
else if (Input is long l) { DoSomething(l) ; }
最好的?大概作品是的


在本例中,您实际上是在调用
System.Object
GenericType。

您可以尝试以下操作

if (Input is int i) { DoSomething(i) ; }
else if (Input is long l) { DoSomething(l) ; }
最好的?大概作品是的


在本例中,您正在有效地调用
System.Object
GenericType。

您可以使用
开关
执行此操作:


您可以使用
开关
执行此操作:


不能使用evey变量类型进行切换,因此会出现错误。您可以使用bool、char、string、enum或null类型的开关。使用if语句您确定此方法需要是泛型的吗?实现看起来根本不是泛型的。最好的做法是不要使用不是真正泛型的泛型方法。如果您需要根据类型选择不同的内容,则重载更安全。与在系统中使用模板相比,更容易容忍代码重复。在没有启动变量的情况下,类型比较简单类型,因为我在第22条军规中,它需要在某个时刻启动,以知道如何处理它,这意味着它不能是泛型的。您不能使用evey变量类型进行切换,因此会出现错误。您可以使用bool、char、string、enum或null类型的开关。使用if语句您确定此方法需要是泛型的吗?实现看起来根本不是泛型的。最好的做法是不要使用不是真正泛型的泛型方法。如果您需要根据类型选择不同的内容,则重载更安全。与在系统中使用模板相比,更容易容忍代码重复。在没有启动变量的情况下,类型比较简单类型,因为我处于第22条军规中,需要在某个时候启动它,以知道如何处理它,这意味着它不能是通用的。请注意,这仅适用于C#7及以上版本。请注意,这仅适用于C#7及以上版本。