C# 为什么LINQ方法具有可选类型

C# 为什么LINQ方法具有可选类型,c#,linq,C#,Linq,许多LINQ方法采用 MethodName<Type>(); 为什么我要键入该语句的部分?是否存在它具有实用性的情况?因为在第二种情况下,编译器会根据someStringList的类型自动推断出一种类型。因为它是IEnumerable编译器会将泛型参数类型解析为string 好的,听起来它可以用来铸造,如果需要的话…为什么不使用。铸造 因为Cast方法将非泛型IEnumerable作为第一个参数,因此无法推断类型,这就是为什么需要提供它。首先,请注意,这适用于任何泛型方法,而不仅仅

许多LINQ方法采用

MethodName<Type>();

为什么我要键入该语句的
部分?是否存在它具有实用性的情况?

因为在第二种情况下,编译器会根据
someStringList
的类型自动推断出一种类型。因为它是
IEnumerable
编译器会将泛型参数类型解析为
string


好的,听起来它可以用来铸造,如果需要的话…为什么不使用。铸造


因为
Cast
方法将非泛型
IEnumerable
作为第一个参数,因此无法推断类型,这就是为什么需要提供它。

首先,请注意,这适用于任何泛型方法,而不仅仅是LINQ方法

通常,不需要在泛型方法上指定类型,因为通常可以从用法推断类型。例如:

 T SomeFunc<T>(T arg) {....}

 var x = SomeFunc("Hello World");
在这种情况下,必须指定类型:

 var x = SomeOtherFunc<int>("Hello World");      // x will be an int.
var x=SomeOtherFunc(“你好世界”);//x将是一个整数。
如果您真的想,比如说为了更清楚,您可以指定类型,即使可以推断,但它必须是正确的:

 T SomeFunc<T>(T arg) {....}

 var x = SomeFunc<string>("Hello World");    // OK 
 var y = SomeFunc<int>("Hello World");       // Error
T SomeFunc(T arg){….}
var x=SomeFunc(“你好世界”);//好啊
var y=SomeFunc(“你好世界”);//错误
最后,请记住,对于扩展方法,如示例中的
First
,对象实际上是第一个参数,因此可以在类型推断中使用<代码>第一个将定义为:

 public static T First<T>(this IEnumerable<T> coll) ;
publicstatict优先(此IEnumerable coll);

好的,所以如果需要,它听起来可以用于强制转换…为什么不使用
.cast
?如果您明确指定类型,它必须与传入的参数的实际类型相匹配。没有演员阵容。啊,这很有道理。非常感谢。
 T SomeFunc<T>(T arg) {....}

 var x = SomeFunc<string>("Hello World");    // OK 
 var y = SomeFunc<int>("Hello World");       // Error
 public static T First<T>(this IEnumerable<T> coll) ;