Why can't I assign the return of a LINQ Find() or FirstOrDefault() result?
<pre><code>class Program
{
    static void Main(string[] args)
    {
        var people = new List&lt;Person&gt;
        {
            new Person { Name = "foo" },
            new Person { Name = "bar" }
        };

        // ERROR: Left-hand side must be a variable, property, or indexer
        people.FirstOrDefault(x =&gt; x.Name == "foo") = new Person();
    }
}

public class Person
{
    public string Name { get; set; }
}
</code></pre>

<p>Why is the above <code>FirstOrDefault</code> line not valid .NET code? If the return of <code>FirstOrDefault()</code> isn't a variable, what is it?</p>

<p>Edit: I understand how to make this valid .NET code - my point is trying to get a concrete answer as to why this is not valid. A definition from the docs perhaps as to why. I don't need to see how to make it correct :)</p>