为什么我们需要在以下方法中使用两次type

public void Search<T>(T bo) { }


我们可以声明吗

public void Search(T bo){}.


找不到此答案?请帮忙。

提前致谢。

最佳答案

在摘要中:

public void Search<T>(T bo);


<T>指定存在一个名为T的类型参数。然后,T bo指定存在类型为T的参数,该参数在方法内部将被称为bo

如果不包括<T>部分,则编译器将无法知道bo是泛型参数,而不仅是T类的实例。

如果您知道以下内容可以实现完全相同的功能,则可能会更易于理解:

public void Search<Something>(Something bo);


如果排除了<Something>部分,则没有什么可以与采用称为Something的类的实例的普通方法加以区分的:

public void Search(Something bo);


回答第二个问题:


  仅使用public void Search(<T> bo)会没有意义吗?


由于通用类型不一定要使用参数,因此无法使用。也不一定是返回类型。它可能根本不会出现在方法签名的其他地方。一个简单的例子可能是:

public bool IsType<T>(object input)
{
    return input.GetType() == typeof(T);
}


在这种情况下,绝对必须使用type参数。在某些情况下,可以像您建议的那样使用语法进行推断,但这会导致不同情况下的各种不一致。

关于c# - 为什么泛型类型在方法签名中出现两次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23347126/

10-12 12:38
查看更多