考虑到下面的应用程序代码,有 3 个重载的扩展方法执行相同的操作以及具有相同的输入和输出:
- 使用和调用和定义方法的参数有什么好处(或区别)?
- 为什么要使用它们(如果没有它们的相同方法 3 将被调用并执行相同操作)?
- 或者如何在方法中手动/显式使用它们(此类信息)?
代码:
namespace LINQ_CreatingYourFirstExtensionMethod
{
internal class Program
{
private static void Main(string[] args)
{
string[] aBunchOfWords = {"One", "Two", "Hello", "World", "Four", "Five"};
var iEnuResult = from s in aBunchOfWords
where s.Length == 5
select s;
iEnuResult.Write();
iEnuResult.Write<string>();
iEnuResult.Write<object>();//same effect as above line
Console.ReadKey();
}
}
}
重载的扩展方法 Write():
namespace LINQ_CreatingYourFirstExtensionMethod
{
public static class Utils
{
public static void Write(this IEnumerable<object> source) //****1
//public static void Write(this IEnumerable<string> source)//same effects as above line
{
foreach (var item in source)
{
Console.WriteLine(item);
}
}
public static void Write<T>(this IEnumerable<T> source)//****2
{
foreach (var item in source)
{
Console.WriteLine(item);
}
}
public static void Write(this IEnumerable source)//******3
{
foreach (var item in source)
{
Console.WriteLine(item);
}
}
}
}
更新:
你能给我任何最简单的说明为什么我需要
- 使用调用方法
<Type>
- 定义一个方法使用
<Type>
如果没有它我可以做同样的事情吗?
更新2:
我没有立即写它,因为我认为从问题的上下文中很明显。
在当前代码中:
iEnuResult.Write();
调用
进入第一个方法:public
static void Write(this IEnumerable source) // * *1- iEnuResult.Write(); (或 iEnuResult.Write();) 调用
进入第二个方法:public static void Write1(this IEnumerable source)// * *2
如果要注释掉
public static void Write1<T>(this IEnumerable<T> source)//*****2
然后
iEnuResult.Write1<object>();
无法制作(仅iEnuResult.Write();
)
如果同时评论第一种和第二种方法,则调用 3d 方法
iEnuResult.Write();
因此,可以<Type>
在调用(调用)中调用带有和不带有 a 的“相同”方法,以及带有和不带有 a 的方法定义<Type>
。
有多种组合(我会说几十种)可以做看似相同的事情,我看不出有太多理由。
所以,我想了解这种差异存在的目的是什么,如果有的话