2016-04-29 9 views
-2

拡張メソッドを定義するための次の表記に気付きました。それは ラムダ記法によるC#メソッド定義

public static IEnumerable<MemberInfo> GetMembersInAssembly(
     this Assembly asm, string memberName) => 
      from type in asm.GetTypes() 
      from ms in type.GetMember(memberName, MemberTypes.All, 
       BindingFlags.Public | BindingFlags.NonPublic | 
       BindingFlags.Static | BindingFlags.Instance) 
      select ms; 

2013のVisual StudioでしかVS2015

で認識されていないので、構文のこの種のは、私は私が何であるかをお願いしたいと思い同等クラスの構文は

public static IEnumerable<MemberInfo> GetMembersInAssembly1(
this Assembly asm, string memberName) { 
return from type in asm.GetTypes() 
from ms in type.GetMember(memberName, MemberTypes.All, 
BindingFlags.Public | BindingFlags.NonPublic | 
BindingFlags.Static | BindingFlags.Instance) 
select ms; 
} 

だろうと信じて新しいなければなりませんこの新しい構文のセマンティクス?

+0

https://msdn.microsoft.com/en-us/magazine/dn802602.aspx表現ボディを探し –

+0

なぜ誰かがこれを閉じるために投票したのですか? –

+0

@ScottSelby:私はチュートリアルやオフサイトのリソースを求めて話題になってしまうことに投票しました。 Arturoのコメントは、私の理由(MSDNの記事が存在する)を検証します。私はそれが話題になっているということで嫌いなことを理解しています。 –

答えて

1

私ははい、それは同じだ、これは式ボディ呼ばC#6.0の新機能で、シンタックスシュガーである同等クラスの構文は

であろうと信じています指定された式でボディが定義されているメソッドとプロパティを定義することができます。例えば

public string Property 
{ 
    get 
    { 
     return "some value"; 
    } 
} 

public void PrintLine(string line) 
{ 
    Console.WriteLine(line); 
} 

は次のように書くことができます:

public string Property => "some value"; 

public void PrintLine(string line) => Console.WriteLine(line); 
-2

あなたの同等のクラスは正しくないと思います。そのような構文はLINQクエリです。 https://msdn.microsoft.com/en-us/library/bb397676.aspx

+2

- OPは、LINQが何であるかを知っていて、特に定義内でLINQ機能を持つ拡張メソッドを要求していました –

関連する問題