error CS8803: Top-level statements must precede namespace and type declarations


I don’t know how to write c# code. I am trying to run a sample code here –

This is the code I have copied in powershell. When I do dotnet run, I get error

/home/manu/Program.cs(24,1): error CS8803: Top-level statements must precede namespace and type declarations. [/home/manu/manu.csproj]

The build failed. Fix the build errors and run again.


// See for more information
using Microsoft.Azure.Cosmos;
using Azure.Identity;

// New instance of CosmosClient class
using CosmosClient client = new(
    accountEndpoint: Environment.GetEnvironmentVariable("COSMOS_ENDPOINT"),
    tokenCredential: new DefaultAzureCredential()

// C# record representing an item in the container
public record Product(
    string id,
    string categoryId,
    string categoryName,
    string name,
    int quantity,
    bool sale

// Database reference with creation if it does not already exist
Database database = client.GetDatabase(id: "cosmicworks");

Console.WriteLine("Hello, World!");

Console.WriteLine($"New database:\t{database.Id}");

// Container reference with creation if it does not alredy exist
Container container = database.GetContainer(id: "products");

Console.WriteLine($"New container:\t{container.Id}");

// Create new object and upsert (create or replace) to container
Product newItem = new(
    id: "70b63682-b93a-4c77-aad2-65501347265f",
    categoryId: "61dba35b-4f02-45c5-b648-c6badc0cbd79",
    categoryName: "gear-surf-surfboards",
    name: "Yamba Surfboard",
    quantity: 12,
    sale: false

Product createdItem = await container.CreateItemAsync<Product>(
    item: newItem

Console.WriteLine($"Created item:\t{}\t[{createdItem.categoryName}]");

// Point read item from container using the id and partitionKey
Product readItem = await container.ReadItemAsync<Product>(
    id: "70b63682-b93a-4c77-aad2-65501347265f",
    partitionKey: new PartitionKey("61dba35b-4f02-45c5-b648-c6badc0cbd79")

// Create query using a SQL string and parameters
var query = new QueryDefinition(
    query: "SELECT * FROM products p WHERE p.categoryId = @categoryId"
    .WithParameter("@categoryId", "61dba35b-4f02-45c5-b648-c6badc0cbd79");

using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
    queryDefinition: query

while (feed.HasMoreResults)
    FeedResponse<Product> response = await feed.ReadNextAsync();
    foreach (Product item in response)
        Console.WriteLine($"Found item:\t{}");

What is the right way to structure the code?

>Solution :

Your current code structure is:

  • using directives
  • A top-level statement (declaring the client variable)
  • A record type declaration
  • More top-level statements

As the error message says, all top-level statements must come before any type declarations.

Two options to fix this:

  • Stop using top-level statements: create a Program class with a Main method and put your code in that, and declare the Product record separately
  • Just move the Product record to below all your top-level statements, or into a different file

Leave a Reply Cancel reply