Linq:予備知識(1)

3784 ワード

一:ステルス局所変数(var)
    public class UserInfo 
    {
        public string userName {get; set;}
        public string passWord {get; set;}
    }
    class Program
    {
        static void Main(string[] args)
        {
            List<UserInfo> users = new List<UserInfo>();
            for (int i = 0; i < 10; i++)
            {
                UserInfo user = new UserInfo();
                user.userName = string.Format("user{0}", i.ToString());
                user.passWord = string.Format("user{0}", i.ToString());
                users.Add(user);
            }
            foreach (var user in users)
            {
                Console.WriteLine(user.userName);
                Console.WriteLine(user.passWord);
                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }

 
以前foreachを書くときは、列挙可能な変数の具体的なタイプを知らなければなりません.今はvarを1つ使えばいいです.例のforeach(var user in users)のように.varは、usingブロックなど、多くの場合に使用できます.
            using (var file = new StreamReader("c:\\a.txt"))
            {
                //
            }

 
しかし、開発の過程で以下の点に注意しなければならない.1:varキーワードを大量に使用するとプログラムコードが理解しにくくなる.2:var変数を宣言するときは初期化しなければならないし、null 3に初期化することもできない.同じ文で複数の暗黙的なタイプの変数を初期化することはできない.例えば、int a=1、b=2と書くことができる.しかしvar a=1,b=2と書くことはできません.
 
二:オブジェクト初期化器
    public class UserInfo 
    {
        public string userName {get; set;}
        public string passWord {get; set;}
    }
    class Program
    {
        static void Main(string[] args)
        {
            UserInfo user = new UserInfo { userName = "xland", passWord = "mypass" };
            Console.WriteLine(user.userName);
            Console.WriteLine(user.passWord);
            Console.ReadKey();
        }
    }

 
UserInfo user = new UserInfo { userName = "xland", passWord = "mypass"};これはオブジェクトを初期化する新しい方法で、オブジェクト初期化器と呼ばれます.
 
三:匿名タイプオブジェクト匿名オブジェクト表面上はvarキーワードとオブジェクト初期化器が結合した生成物である
        static void Main(string[] args)
        {
            var user = new { userName = "xland", passWord = "mypass" };
            Console.WriteLine(user.userName);
            Console.WriteLine(user.passWord);
            Console.ReadKey();
        }

 
コンパイル中、コンパイラは対応するフィールドを含むオブジェクトを作成し、これらのフィールドに属性配列を作成します.また、オブジェクトに匿名配列を作成します.
        static void Main(string[] args)
        {
            var number = new[] {  0,1,2,3};
            //int[] number = new int[] { 0, 1, 2, 3 };
            foreach (var i in number)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();
        }

 
匿名配列内の要素はタイプを一致させなければならない.そうしないとコンパイルできない.
 
四:Lambda式Lambda式は匿名の関数ですが、書き方が違います.
    public delegate void lambdaEventHandler();
    class Program
    {
        public static event lambdaEventHandler lambda;
        static void Main(string[] args)
        {
            lambda += () =>  Console.WriteLine("hellow linq world"); 
            lambda();
            Console.ReadKey();
        }
    }

 
匿名関数にパラメータがあり、コードブロックに複数の文がある場合.次のようになります.
    public delegate void lambdaEventHandler(object sender,EventArgs e);
    class Program
    {
        public static event lambdaEventHandler lambda;
        static void Main(string[] args)
        {
            lambda += (sender, e) =>
                {
                    Console.WriteLine("hellow linq world");
                    Console.WriteLine((string)sender);
                };
            lambda("sender",null);
            Console.ReadKey();
        }
    }