Monday, April 19, 2010

04/19 : Func Sample Code

 

/****************************************************************************
*
*
* Author : Dayang Sun
*
* File   : Program.cs
*
* Date   : 4/19/2010 5:00:49 PM
*
* 使用Func<T,TResult>和Action<T>,Action而不使用Delegate其实都是为了简化代码, 使用更少的代码达到相同的效果,不需要我们显示的声明一个委托,Func<T,TResult>的最后一个参数始终是返回类型,而 Action<T,TResult>是没有返回类型的,而Action是没有返回类型和参数输入的。

*
* ***************************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    delegate int Searcher(string searchString, int start, int count,
                         StringComparison type);

    class Program
    {

        // Without using Func generic deletegate
        static void Main(string[] args)
        {
            //WithoutFunc();
            //WithFunc();
            //WithFuncAnonymous();
            //WithFuncLamada();
            WithFuncLing();
        }

        // Without using Func generic deletegate
        static void WithoutFunc()
        {
            string title = "The House of the Seven Gables";
            int position = 0;
            Searcher finder = title.IndexOf;
            do
            {
                int characters = title.Length - position;
                position = finder("the", position, characters,
                                StringComparison.InvariantCultureIgnoreCase);
                if (position >= 0)
                {
                    position++;
                   Console.WriteLine ( String.Format("'The' found at position {0} in {1}.",
                                      position, title) + "\n");
                }
            } while (position > 0);

        }

        // By this way, can not add more code except call indexof function
        static void WithFunc()
        {
            string title = "The House of the Seven Gables";
            int position = 0;
            Func<string, int, int, StringComparison, int> finder = title.IndexOf;
            do
            {
                int characters = title.Length - position;
                position = finder("the", position, characters,
                                StringComparison.InvariantCultureIgnoreCase);
                if (position >= 0)
                {
                    position++;
                    Console.WriteLine(String.Format("'The' found at position {0} in {1}.",
                                      position, title) + "\n");
                }
            } while (position > 0);

        }

        static void WithFuncAnonymous()
        {
            string title = "The House of the Seven Gables";
            int position = 0;
            Func<string, int, int, StringComparison, int> finder =
                 delegate(string s, int pos, int chars, StringComparison type)
                 {
                     Console.WriteLine("sdy");
                     return title.IndexOf(s, pos, chars, type); };
            do
            {
                int characters = title.Length - position;
                position = finder("the", position, characters,
                                StringComparison.InvariantCultureIgnoreCase);
                if (position >= 0)
                {
                    position++;
                    Console.WriteLine(String.Format("'The' found at position {0} in {1}.",
                                      position, title) + "\n");
                }
            } while (position > 0);

        }

        static void WithFuncLamada()
        {
            string title = "The House of the Seven Gables";
            int position = 0;
            Func<string, int, int, StringComparison, int> finder =
               (s, pos, chars, type) =>
               {
                   Console.WriteLine("WithFuncLamada");
                 return  title.IndexOf(s, pos, chars, type);
               };
            do
            {
                int characters = title.Length - position;
                position = finder("the", position, characters,
                                StringComparison.InvariantCultureIgnoreCase);
                if (position >= 0)
                {
                    position++;
                    Console.WriteLine(String.Format("'The' found at position {0} in {1}.",
                                      position, title) + "\n");
                }
            } while (position > 0);

        }

        static void WithFuncLing()
        {
            Func<String, int, bool> predicate = (str, index) => str.Length == index;

            String[] words = { "orange", "apple", "Article", "elephant", "star", "andty" };
            IEnumerable<String> aWords = words.Where(predicate).Select(str => str);

            foreach (String word in aWords)
               Console.WriteLine ( word + "\n");

        }
    }

}

0 Comments:

Post a Comment

<< Home