<?xml version="1.0" encoding="utf-8"?>
<Type Name="Func&lt;TResult&gt;" FullName="System.Func&lt;TResult&gt;">
  <TypeSignature Language="C#" Value="public delegate TResult Func&lt;TResult&gt;();" />
  <AssemblyInfo>
    <AssemblyName>System.Core</AssemblyName>
    <AssemblyVersion>3.5.0.0</AssemblyVersion>
  </AssemblyInfo>
  <TypeParameters>
    <TypeParameter Name="TResult" />
  </TypeParameters>
  <Base>
    <BaseTypeName>System.Delegate</BaseTypeName>
  </Base>
  <Parameters />
  <ReturnValue>
    <ReturnType>TResult</ReturnType>
  </ReturnValue>
  <Docs>
    <typeparam name="TResult">To be added.</typeparam>
    <value>To be added.</value>
    <remarks>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>You can use this delegate to represent a method that can be passed as a parameter without explicitly declaring a custom delegate. The encapsulated method must correspond to the method signature that is defined by this delegate. This means that the encapsulated method must have no parameters and must return a value.</para>
      <block subset="none" type="note">
        <para>To reference a method that has no parameters and returns void (or in Visual Basic, that is declared as a Sub rather than as a Function), use the <see cref="T:System.Action" /> delegate instead. </para>
      </block>
      <para>When you use the <see cref="T:System.Func`1" /> delegate, you do not have to explicitly define a delegate that encapsulates a parameterless method. For example, the following code explicitly declares a delegate named WriteMethod and assigns a reference to the OutputTarget.SendToFile instance method to its delegate instance. </para>
      <para>code reference: System.Func~1#1</para>
      <para>The following example simplifies this code by instantiating the <see cref="T:System.Func`1" /> delegate instead of explicitly defining a new delegate and assigning a named method to it. </para>
      <para>code reference: System.Func~1#2</para>
      <para>You can use the <see cref="T:System.Func`1" /> delegate with anonymous methods in C#, as the following example illustrates. (For an introduction to anonymous methods, see <format type="text/html"><a href="a62441fa-f0a3-4acb-9aa6-93762a635275">Anonymous Methods (C# Programming Guide)</a></format>.)</para>
      <para>code reference: System.Func~1#3</para>
      <para>You can also assign a lambda expression to a <see cref="T:System.Func`2" /> delegate, as the following example illustrates. (For an introduction to lambda expressions, see <format type="text/html"><a href="137064b0-3928-4bfa-ba71-c3f9cbd951e2">Lambda Expressions</a></format> and <format type="text/html"><a href="57e3ba27-9a82-4067-aca7-5ca446b7bf93">Lambda Expressions (C# Programming Guide)</a></format>.)</para>
      <para>code reference: System.Func~1#4</para>
      <para>The underlying type of a lambda expression is one of the generic Func delegates. This makes it possible to pass a lambda expression as a parameter without explicitly assigning it to a delegate. In particular, because many methods of types in the <see cref="N:System.Linq" /> namespace have Func parameters, you can pass these methods a lambda expression without explicitly instantiating a Func delegate.</para>
      <para>If you have an expensive computation that you want to execute only if the result is actually needed, you can assign the expensive function to a <see cref="T:System.Func`1" /> delegate. The execution of the function can then be delayed until a property that accesses the value is used in an expression. The example in the next section demonstrates how to do this.</para>
    </remarks>
    <summary>
      <attribution license="cc4" from="Microsoft" modified="false" />
      <para>Encapsulates a method that has no parameters and returns a value of the type specified by the <paramref name="TResult" /> parameter.</para>
    </summary>
  </Docs>
</Type>