我看到这个扩展方法是
/// <summary>
/// Converts a generic <see cref="T:System.Collections.Generic.IEnumerable`1"/> to a generic <see cref="T:System.Linq.IQueryable`1"/>.
/// </summary>
///
/// <returns>
/// An <see cref="T:System.Linq.IQueryable`1"/> that represents the input sequence.
/// </returns>
/// <param name="source">A sequence to convert.</param><typeparam name="TElement">The type of the elements of <paramref name="source"/>.</typeparam><exception cref="T:System.ArgumentNullException"><paramref name="source"/> is null.</exception>
public static IQueryable<TElement> AsQueryable<TElement>(this IEnumerable<TElement> source)
{
return (IQueryable<TElement>) null;
}
但是我不明白返回是做什么的,只是返回null不是吗?
答案 0 :(得分:4)
ReSharper给了我以下内容:
/// <summary>
/// Converts a generic <see cref="T:System.Collections.Generic.IEnumerable`1"/> to a generic <see cref="T:System.Linq.IQueryable`1"/>.
/// </summary>
///
/// <returns>
/// An <see cref="T:System.Linq.IQueryable`1"/> that represents the input sequence.
/// </returns>
/// <param name="source">A sequence to convert.</param><typeparam name="TElement">The type of the elements of <paramref name="source"/>.</typeparam><exception cref="T:System.ArgumentNullException"><paramref name="source"/> is null.</exception>
[__DynamicallyInvokable]
public static IQueryable<TElement> AsQueryable<TElement>(this IEnumerable<TElement> source)
{
if (source == null)
throw System.Linq.Error.ArgumentNull("source");
if (source is IQueryable<TElement>)
return (IQueryable<TElement>) source;
else
return (IQueryable<TElement>) new EnumerableQuery<TElement>(source);
}
VS的标准概述算法就是这样。 VS没有给你真正的实现细节。
答案 1 :(得分:1)
我不认为你所看到的是代码的最终版本或完整版本。对于.NET 3.5来说,Reflector给了我这个(几乎与timmkrause的答案相同):
public static IQueryable<TElement> AsQueryable<TElement>(this IEnumerable<TElement> source)
{
if (source == null)
{
throw Error.ArgumentNull("source");
}
if (source is IQueryable<TElement>)
{
return (IQueryable<TElement>) source;
}
return new EnumerableQuery<TElement>(source);
}
您需要使用反汇编程序从已编译的CLR汇编代码返回到源实现;元数据提供程序(例如Visual Studio 2012中内置的元数据提供程序或类似程序)通常不会为您提供实际的来源。
请注意,Resharper和Reflector提供了不同的样式和命名资格,但每个都显示相同的功能。