Если вы знаете, как они реализовали Where и выбирают методы расширения, вы можете предсказать, что он делает ...
Я пытался реализовать где и выбрать методы расширения ... Вы можете посмотреть на это ...
Где реализация ::
public static IEnumerable<Tsource> Where<Tsource> ( this IEnumerable<Tsource> a , Func<Tsource , bool> Method )
{
foreach ( var data in a )
{
//If the lambda Expression(delegate) returns "true" Then return the Data. (use 'yield' for deferred return)
if ( Method.Invoke ( data ) )
{
yield return data;
}
}
}
Выберите реализацию ::
public static IEnumerable<TResult> Select<TSource , TResult> ( this IEnumerable<TSource> a , Func<TSource , TResult> Method )
{
foreach ( var item in a )
{
//Each iteration call the delegate and return the Data back.(use 'yield' for deferred return)
yield return Method.Invoke ( item );
}
}
Моя реализация отлично работает для любой коллекции ... Но она отличается от методов расширения, реализованных Microsoft, поскольку они используют деревья выражений для реализации одного и того же.