[nem-en] use extension methods from derived class

mei mei at work.email.ne.jp
Mon May 8 20:49:04 CEST 2006


Hi

there is the following extension methods.

module Extensions {
    public All [T] (this objs : IEnumerable[T], fn : T -> bool) : bool {
        return : {
            foreach (o in objs)
                when (!fn (o))
                    return (false);
            return (true);
        }
    }
}

and use this.

def ls = $ [0, 2 .. 10];
def ar = array [1, 2, 3, 4, 5];

ls.All (x => x % 2 == 0);
ar.All (x => x < 10);

but compile error occurred.

however,

def ls = $ [0, 2 .. 10] : IEnumerable [int];
def ar = array [1, 2, 3, 4, 5] : IEnumerable [int];

then compile ok.


C#3.0 (LINQ) do not need that cast.

-- sample.cs for C#3.0

using System;
using System.Collections.Generic;

public delegate bool Pred<T>(T t);

public static class Extensions {
    public static bool All<T> (this IEnumerable<T> objs, Pred<T> pred)
    {
        foreach (T o in objs)
            if (!pred(o))
                return false;
        return true;
    }
}

public class App {
    public static void Main () {
        int[] arr = new [] { 2, 4, 6 };
        if (arr.All<int>(delegate (int x) { return x % 2 == 0; }))
            Console.WriteLine ("All !");
    }
}

I'd like to do this.

-- 
akiramei <mei at work.email.ne.jp>



More information about the devel-en mailing list