c#3.0 特性

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq.Expressions;

namespace NewFeature
{
    class Person
    {
        public int ID;
        public int IDRole;
        public string FirstName;
        public string LastName;
    }

    static class Extend
    {
        /// <summary>
        /// String Extension Method,transform the white space to underscore.
        /// </summary>
        /// <param name="s"></param>
        /// <param name="isUpper"></param>
        /// <returns></returns>
        public static string SpaceToUnderscore(this string s, bool isUpper) //Extension Method,Notice [this] position
        {
            char[] charArray = s.ToCharArray();
            string result = null;
            foreach (char c in charArray)
            {
                if (char.IsWhiteSpace(c))
                    result += "_";
                else
                    result += c;
            }
            return isUpper ? result.ToUpper() : result;
        }


    }

    class Program
    {
        static void Main(string[] args)
        {
            CSharpNewFeatures();

            QueryAsMethod();

            Console.ReadKey();
        }

        static void CSharpNewFeatures()
        {
            //(1),Extension Method
            string str = "I'm jerry chou";
            Console.WriteLine("Extesion Method for string:\n{0}\n",str.SpaceToUnderscore(true));

            //(2),Lambda Expressions
            // delegate void Action(void);
            Action doAction = delegate() { Console.WriteLine("I'm nothing, just use Anonymous Method"); };
            Action doLambdaAtion = () => { Console.WriteLine("I'm anything, just use Lambda Expression\n"); };
            doAction();
            doLambdaAtion();

            //(3),Expression Tree
            Expression<Func<Person, bool>> e = p => p.ID == 1;
            BinaryExpression body = e.Body as BinaryExpression;
            MemberExpression left = body.Left as MemberExpression;
            ConstantExpression right = body.Right as ConstantExpression;
            Console.WriteLine("Expression Tree:\n{0}",left.ToString());
            Console.WriteLine(body.NodeType.ToString());
            Console.WriteLine(right.Value.ToString() + "\n");


            //(4),Anonymous Types,
            //(5),use Object Initializaion Expressions
            object obj = new { LastName = "Anderson", FirstName = "Brad" };
            object obj2 = new { LastName = "Jerry", Age = 26, IsMale = true };
            Console.WriteLine("Type:\t{0}\nToString:\t{1}", obj.GetType(), obj.ToString());
            Console.WriteLine("Type:\t{0}\nToString:\t{1}\n", obj2.GetType(), obj2.ToString());

            //(6),Implicitly Typed Local Variables
            var itlv = new { LastName = "Jerry", Age = 26, IsMale = true };
            Console.WriteLine("Implicitly Typed Loca Variables({0}):\nLast Name[{1}]\tAge[{2}]\tIsMale[{3}]\n",itlv.GetType(), itlv.LastName, itlv.Age, itlv.IsMale);
            
//itlv.Age = 99; //Anonymous Type cannot be assigned to -- it is read only


        }
        /// <summary>
        /// LINQ中SQOs(Standard Query Operators),最终会在Compile-Time被编译器转换为函数调用
        /// </summary>
        static void QueryAsMethod()
        {
            string sentence = "the quick brown fox jumps over the lazy dog";
            // Split the string into individual words to create a collection.
            string[] words = sentence.Split(' ');

            // Using query expression syntax.
            var query = from word in words
                        group word.ToUpper() by word.Length into gr
                        orderby gr.Key
                        select new { Length = gr.Key, Words = gr };

            // Using method-based query syntax.
            var query2 = words.
                GroupBy(w => w.Length, w => w.ToUpper()).
                Select(g => new { Length = g.Key, Words = g }).
                OrderBy(o => o.Length);

            foreach (var obj in query)
            {
                Console.WriteLine("Words of length {0}:", obj.Length);
                foreach (string word in obj.Words)
                    Console.WriteLine(word);
            }

// This code example produces the following output:
            //
            // Words of length 3:
            // THE
            // FOX
            // THE
            // DOG
            // Words of length 4:
            // OVER
            // LAZY
            // Words of length 5:
            // QUICK
            // BROWN
            // JUMPS 
        }
    }
}

原文:http://blog.chinaunix.net/u/11680/showart_1414688.html
原文地址:https://www.cnblogs.com/chenfulai/p/1389799.html