﻿<?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>