Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement

This error might look a little cryptic at first glance, but it's fairly descriptive in explaining what's wrong. You're likely to come across this one before your first cup of coffee.

Only assignment, call, increment, decrement, await, and new object expressions can be used as a statement

This error might look a little cryptic at first, but what it's basically telling you is that what you typed isn't a valid C# statement. It probably looks really close though, because usually you just have a small typo.

First though, what's a statement? Well, it's every valid line (or in some cases, block) of code that makes up your program, for example:

  • Assignments: string name = "my string";
  • Calls: MyOtherFunction();
  • Increments: x++;
  • Decrements: x--;
  • Await: await myLongTask;
  • New object expressions: new Person();

In general, most statements should either modify a variable's value in-place, perform some side-effect (like a foreach block), or at least do something with the return value.

So if you get this error, double-check the line it's complaining about to make sure it's a valid statement, specifically one of the types listed in the error message itself.

What should you check for?

Are you missing a set of parentheses?
Console.WriteLine

Did you use == instead of =?
string name;
name == Grant;

Did you combine elements of a property and method?
public string Name() { get; set; }

Does your statement only return a value, but you're doing nothing with it?
var hi = "Hello, "; hi + " Grant";

If none of those do it for you, feel free to leave a comment below. Heck, post the offending line, and we'll debug it together - maybe I'll have something else to add to this list.