Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AsQueryable()是如何在ASP.NET中实现的_C#_.net_Linq - Fatal编程技术网

C# AsQueryable()是如何在ASP.NET中实现的

C# AsQueryable()是如何在ASP.NET中实现的,c#,.net,linq,C#,.net,Linq,我看到这个扩展方法是 /// <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:Sys

我看到这个扩展方法是

/// <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;
}
//
///将泛型转换为泛型。
/// 
/// 
/// 
///表示输入序列的。
/// 
///要转换的序列。元素的类型。是空的。
公共静态IQueryable AsQueryable(此IEnumerable源)
{
返回(IQueryable)null;
}

但我不明白返回的作用,只是返回null,不是吗?

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);
}
//
///将泛型转换为泛型。
/// 
/// 
/// 
///表示输入序列的。
/// 
///要转换的序列。元素的类型。是空的。
[[uuuu动态调用可禁用]
公共静态IQueryable AsQueryable(此IEnumerable源)
{
if(source==null)
抛出System.Linq.Error.ArgumentNull(“源”);
如果(源是可查询的)
返回(IQueryable)源;
其他的
返回(IQueryable)新的EnumerableQuery(源);
}

VS的标准大纲算法就是这样工作的。VS没有提供真正的实现细节。

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);
}
//
///将泛型转换为泛型。
/// 
/// 
/// 
///表示输入序列的。
/// 
///要转换的序列。元素的类型。是空的。
[[uuuu动态调用可禁用]
公共静态IQueryable AsQueryable(此IEnumerable源)
{
if(source==null)
抛出System.Linq.Error.ArgumentNull(“源”);
如果(源是可查询的)
返回(IQueryable)源;
其他的
返回(IQueryable)新的EnumerableQuery(源);
}

VS的标准大纲算法就是这样工作的。VS没有提供真正的实现细节。

我不认为您看到的是代码的最终版本或完整版本。Reflector为.NET 3.5提供了以下内容(与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);
}
公共静态IQueryable AsQueryable(此IEnumerable源代码)
{
if(source==null)
{
抛出错误。ArgumentNull(“源”);
}
如果(源是可查询的)
{
返回(IQueryable)源;
}
返回新的EnumerableQuery(源);
}
您需要使用反汇编程序从编译的CLR汇编代码返回到源实现;诸如内置于Visual Studio 2012或类似版本中的元数据提供程序通常不会提供实际的源代码


请注意,Resharper和Reflector提供了不同的样式和命名条件,但每个都显示了相同的功能。

我不认为您看到的是代码的最终版本或完整版本。Reflector为.NET 3.5提供了以下内容(与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);
}
公共静态IQueryable AsQueryable(此IEnumerable源代码)
{
if(source==null)
{
抛出错误。ArgumentNull(“源”);
}
如果(源是可查询的)
{
返回(IQueryable)源;
}
返回新的EnumerableQuery(源);
}
您需要使用反汇编程序从编译的CLR汇编代码返回到源实现;诸如内置于Visual Studio 2012或类似版本中的元数据提供程序通常不会提供实际的源代码


请注意,Resharper和Reflector提供了不同的样式和命名条件,但每个都显示了相同的功能。

您能否解释一下您是如何获得此源的,以及为什么您认为这可以工作?您在哪里找到的?这与ASP.NET有什么关系?我只是在使用dotpeek时看到了这一点(虽然我是第一次使用它),因为ASP.NET标记是我的错,很抱歉,这不应该发生。你觉得这个怎么样?您也可以尝试使用JustDecompile。谢谢。我只是用dotPeel打开文件夹中的dll,在那里我找到system.Linq.Querayable。正如我所说的,这是我第一次使用这个工具。你能解释一下你是如何获得这个来源的,以及为什么你认为这是可行的吗?你在哪里找到的?这与ASP.NET有什么关系?我只是在使用dotpeek时看到了这一点(虽然我是第一次使用它),因为ASP.NET标记是我的错,很抱歉,这不应该发生。你觉得这个怎么样?您也可以尝试使用JustDecompile。谢谢。我只是用dotPeel打开文件夹中的dll,在那里我找到system.Linq.Querayable。正如我所说的,这是我第一次使用这个工具好吧,很抱歉这个愚蠢的问题。我不知道如何正确地查找代码。谢谢波托克,很抱歉问了你这个愚蠢的问题。我不知道如何正确地查找代码。谢谢两位