2016年9月6日火曜日

C#7.0の新機能:ローカル関数(関数内の関数)

VisualStudio15で追加される予定のC#7.0 をVisualStudio15 Preview4で確認してみました。

C#7.0 では、関数内に関数を記入できるようになるようです。

ちなみに、関数内の関数内にも関数が書けるようです。<---わかりにくい。。。
あと、関数なので当たり前かもしれませんが、CallerFilePathの属性なんかも使えます。
まぁ、その場合は、呼び出し元なので、「WriteLine」関数を指し示します。

using System;
using System.Runtime.CompilerServices;
namespace ConsoleApp1v15
{
    class Sample
    {
        static void Main()
        {
            void Method()
            {
                void WriteLine(string message,
                        [CallerFilePath] string file = "",
                        [CallerLineNumber] int line = 0,
                        [CallerMemberName] string member = "")
                {
                    var s = string.Format("{0}:{1} - {2}: {3}", file, line, member, message);
                    Console.WriteLine(s);
                }
                WriteLine("message");
            }
            Method();
        }
    }
}


結果

c:\Projects\ConsoleApp1v15\ConsoleApp1v15\Program.cs:19 - Method: message

0 件のコメント:

コメントを投稿