C#

Hire the Top 3% of Freelance C# Developers

Toptal is a marketplace for top C# developers, engineers, programmers, coders, architects, and consultants. Top companies and startups choose Toptal C# freelancers for their mission-critical software projects.

No-Risk Trial, Pay Only If Satisfied.

Hire Freelance C# Developers and Engineers

Rory Woods

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since June 5, 2014

Rory is a software consultant delivering solutions to fill enterprise needs. He brings technical skill and experience guiding teams in not just how to build, but what to build. He has extensive experience on the Microsoft web stack, including ASP.NET MVC, Web API, SQL Server, and Azure.

Show More

Rizwan Rizvi

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since June 13, 2018

Rizwan has a reputation for overcoming complex challenges through clear thinking, innovative approaches, and enhancing communication between different parts of organizations. Throughout his career, he has optimized the efforts of diverse and dispersed teams of IT professionals and has consistently delivered projects profitably in challenging environments.

Show More

Dan Napierski

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since April 28, 2016

Dan is a software architect and technology professional focusing on applications of blockchain technologies. He has years of experience providing professional consulting services to clients ranging from startups to global corporations. He specializes in bringing rigorous testing and bulletproof code to tough engineering challenges. He has deep expertise in many aspects of artificial intelligence, blockchain, machine learning, and automation.

Show More

Cheryl Hoskins

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since February 4, 2016

Cheryl is a developer with strong communication skills who seeks to provide software solutions that delight her clients. She has enjoyed working with React, Node.js, REST APIs, GraphQL, SQL, MongoDB, and JavaScript recently and is ready to start putting her skills to work for you. In addition to her technical background, Cheryl has an MBA and can translate your business requirements into quality software solutions.

Show More

Scott Hankinson

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since June 18, 2020

Scott has produced technology used by companies like Microsoft and S&P Global. He has developed software integral for companies selling to larger entities, as well as in taking companies public via IPO. Scott has the ability to design, develop, and deliver database solutions into a production environment. He is capable of controlling every aspect of a software development team as an architect, developer, and project leader.

Show More

Mukesh Agrawal

Freelance C# Developer

IndiaFreelance C# Developer at Toptal Since April 30, 2014

Mukesh has over 16 years of software development and design experience specializing in the Microsoft technology stack and a proven ability to develop efficient, scalable, and fault-tolerant solutions to complex problems. He has extensive experience with all phases of the software development cycle.

Show More

Charles Cook, Ph.D.

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since July 29, 2014

Charles has a Ph.D. in aerospace engineering and spent three years developing custom data processing and analysis programs for NASA. He specializes in scalable, enterprise-level application development and engineering solutions for exceptionally high throughputs. He is also the founder and owner of GreatVocab.com, for which he developed the core system using novel concepts in data analysis and control theory.

Show More

Dmitry Pavlov

Freelance C# Developer

RussiaFreelance C# Developer at Toptal Since July 16, 2012

Dmitry is a top-notch developer with over twenty years of experience creating .NET web applications. He mostly deals with ASP.NET Core and Blazor (C#, .NET Core) software development and architecture design these days. Dmitry has received the Microsoft MVP (Developer Technologies) Award 9 times and is a capable community leader. He has also received a Master of Science degrees in computer science and structural geology and modeling. Clients call him "The Coding Machine."

Show More

Claudio Aldana

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since June 15, 2018

Claudio is a seasoned IT specialist focused on business outcomes, along with having a solid engineering background. He's applied data science to optimize customer satisfaction, product personalization, and customer churn. Claudio is also a certified SharePoint expert and has worked with prominent Microsoft customers, helping them to maximize security, performance, and usability.

Show More

Craig Wenger

Freelance C# Developer

United StatesFreelance C# Developer at Toptal Since August 21, 2015

Craig has been an active freelance embedded systems engineer for more than a decade. He has extensive experience in embedded system hardware and firmware development on a variety of products including medical, communications, industrial automation, motor control, consumer electronics, and IoT.

Show More

Sign up now to see more profiles.

Start Hiring
THE TOPTAL ADVANTAGE

Proven with a 98% success rate. Experience it today with a no-risk trial.

Pair freelance management consultants with a full team of SMEs for end-to-end value creation.

Start Hiring
Frequently paired together

Get Additional Expertise

Our clients frequently pair these additional services with our freelance C# Developers.

A Hiring Guide

Guide to Hiring a Great C# Developer

C# came in as a new kid on the block. At first it was ignored, then it was ridiculed, and then it was fought against, but now it continues to win over developers all over the world. The direct result of this growth is a large number of developers that are using C#. This guide covers topics that every C# developer needs to have mastered, and is essential when making your next hire.

Read Hiring Guide

C# Hiring Resources

Trustpilot
Toptal in the press

... allows corporations to quickly assemble teams that have the right skills for specific projects.

Despite accelerating demand for coders, Toptal prides itself on almost Ivy League-level vetting.

Our clients
Building a cross-platform app to be used worldwide
Thierry Jakicevic
Building a cross-platform app to be used worldwide
Creating an app for the game
Conor Kenney
Creating an app for the game
Leading a digital transformation
Elmar Platzer
Leading a digital transformation
What our clients think
Clients Rate Toptal C# Developers4.3 / 5.0on average across 930 reviews as of Aug 7, 2023
Testimonials

Tripcents wouldn't exist without Toptal. Toptal Projects enabled us to rapidly develop our foundation with a product manager, lead developer, and senior designer. In just over 60 days we went from concept to Alpha. The speed, knowledge, expertise, and flexibility is second to none. The Toptal team were as part of tripcents as any in-house team member of tripcents. They contributed and took ownership of the development just like everyone else. We will continue to use Toptal. As a start up, they are our secret weapon.

Brantley Pace, CEO & Co-Founder

Tripcents

I am more than pleased with our experience with Toptal. The professional I got to work with was on the phone with me within a couple of hours. I knew after discussing my project with him that he was the candidate I wanted. I hired him immediately and he wasted no time in getting to my project, even going the extra mile by adding some great design elements that enhanced our overall look.

Paul Fenley, Director

K Dunn & Associates

The developers I was paired with were incredible -- smart, driven, and responsive. It used to be hard to find quality engineers and consultants. Now it isn't.

Ryan Rockefeller, CEO

Radeeus

Toptal understood our project needs immediately. We were matched with an exceptional freelancer from Argentina who, from Day 1, immersed himself in our industry, blended seamlessly with our team, understood our vision, and produced top-notch results. Toptal makes connecting with superior developers and programmers very easy.

Jason Kulik, Co-Founder

ProHatch

As a small company with limited resources we can't afford to make expensive mistakes. Toptal provided us with an experienced programmer who was able to hit the ground running and begin contributing immediately. It has been a great experience and one we'd repeat again in a heartbeat.

Stuart Pocknee , Principal

Site Specific Software Solutions

We used Toptal to hire a developer with extensive Amazon Web Services experience. We interviewed four candidates, one of which turned out to be a great fit for our requirements. The process was quick and effective.

Abner Guzmán Rivera, CTO and Chief Scientist

Photo Kharma

Sergio was an awesome developer to work with. Top notch, responsive, and got the work done efficiently.

Dennis Baldwin, Chief Technologist and Co-Founder

PriceBlink

Working with Marcin is a joy. He is competent, professional, flexible, and extremely quick to understand what is required and how to implement it.

André Fischer, CTO

POSTIFY

We needed a expert engineer who could start on our project immediately. Simanas exceeded our expectations with his work. Not having to interview and chase down an expert developer was an excellent time-saver and made everyone feel more comfortable with our choice to switch platforms to utilize a more robust language. Toptal made the process easy and convenient. Toptal is now the first place we look for expert-level help.

Derek Minor, Senior VP of Web Development

Networld Media Group

Toptal's developers and architects have been both very professional and easy to work with. The solution they produced was fairly priced and top quality, reducing our time to launch. Thanks again, Toptal.

Jeremy Wessels, CEO

Kognosi

We had a great experience with Toptal. They paired us with the perfect developer for our application and made the process very easy. It was also easy to extend beyond the initial time frame, and we were able to keep the same contractor throughout our project. We definitely recommend Toptal for finding high quality talent quickly and seamlessly.

Ryan Morrissey, CTO

Applied Business Technologies, LLC

I'm incredibly impressed with Toptal. Our developer communicates with me every day, and is a very powerful coder. He's a true professional and his work is just excellent. 5 stars for Toptal.

Pietro Casoar, CEO

Ronin Play Pty Ltd

Working with Toptal has been a great experience. Prior to using them, I had spent quite some time interviewing other freelancers and wasn't finding what I needed. After engaging with Toptal, they matched me up with the perfect developer in a matter of days. The developer I'm working with not only delivers quality code, but he also makes suggestions on things that I hadn't thought of. It's clear to me that Amaury knows what he is doing. Highly recommended!

George Cheng, CEO

Bulavard, Inc.

As a Toptal qualified front-end developer, I also run my own consulting practice. When clients come to me for help filling key roles on their team, Toptal is the only place I feel comfortable recommending. Toptal's entire candidate pool is the best of the best. Toptal is the best value for money I've found in nearly half a decade of professional online work.

Ethan Brooks, CTO

Langlotz Patent & Trademark Works, Inc.

In Higgle's early days, we needed the best-in-class developers, at affordable rates, in a timely fashion. Toptal delivered!

Lara Aldag, CEO

Higgle

Toptal makes finding a candidate extremely easy and gives you peace-of-mind that they have the skills to deliver. I would definitely recommend their services to anyone looking for highly-skilled developers.

Michael Gluckman, Data Manager

Mxit

Toptal’s ability to rapidly match our project with the best developers was just superb. The developers have become part of our team, and I’m amazed at the level of professional commitment each of them has demonstrated. For those looking to work remotely with the best engineers, look no further than Toptal.

Laurent Alis, Founder

Livepress

Toptal makes finding qualified engineers a breeze. We needed an experienced ASP.NET MVC architect to guide the development of our start-up app, and Toptal had three great candidates for us in less than a week. After making our selection, the engineer was online immediately and hit the ground running. It was so much faster and easier than having to discover and vet candidates ourselves.

Jeff Kelly, Co-Founder

Concerted Solutions

We needed some short-term work in Scala, and Toptal found us a great developer within 24 hours. This simply would not have been possible via any other platform.

Franco Arda, Co-Founder

WhatAdsWork.com

Toptal offers a no-compromise solution to businesses undergoing rapid development and scale. Every engineer we've contracted through Toptal has quickly integrated into our team and held their work to the highest standard of quality while maintaining blazing development speed.

Greg Kimball, Co-Founder

nifti.com

How to Hire C# Developers through Toptal

1

Talk to One of Our Industry Experts

A Toptal director of engineering will work with you to understand your goals, technical needs, and team dynamics.
2

Work With Hand-Selected Talent

Within days, we'll introduce you to the right C# developer for your project. Average time to match is under 24 hours.
3

The Right Fit, Guaranteed

Work with your new C# developer for a trial period (pay only if satisfied), ensuring they're the right fit before starting the engagement.

Find Experts With Related Skills

Access a vast pool of skilled developers in our talent network and hire the top 3% within just 48 hours.

FAQs

  • How are Toptal C# developers different?

    At Toptal, we thoroughly screen our C# developers to ensure we only match you with talent of the highest caliber. Of the more than 200,000 people who apply to join the Toptal network each year, fewer than 3% make the cut. You’ll work with engineering experts (never generalized recruiters or HR reps) to understand your goals, technical needs, and team dynamics. The end result: expert vetted talent from our network, custom matched to fit your business needs.

  • Can I hire C# developers in less than 48 hours through Toptal?

    Depending on availability and how fast you can progress, you could start working with a C# developer within 48 hours of signing up.

  • What is the no-risk trial period for Toptal C# developers?

    We make sure that each engagement between you and your C# developer begins with a trial period of up to two weeks. This means that you have time to confirm the engagement will be successful. If you’re completely satisfied with the results, we’ll bill you for the time and continue the engagement for as long as you’d like. If you’re not completely satisfied, you won’t be billed. From there, we can either part ways, or we can provide you with another expert who may be a better fit and with whom we will begin a second, no-risk trial.

Share
C#

How to Hire a Great C# Developer

Remember the Y2K bug? Apparently, the world was supposed to end due to havoc in computer networks all over the planet. Just one year before that, we heard announcements that 1999 will mark the end of the world because it had an inverted 666 in its name. In such turbulent times, when many were piling food in their basements, hoping that Armageddon would not find them, there were a few visionaries that were still inventing some cool stuff. One of them is Anders Hejlsberg, who gathered a team of Microsoft developers and created Cool, which was the first version of new C-like Object Oriented Language, later to be named C# (pronounced “C Sharp”).

14 years and 5 versions later, C# is one of the most popular languages in the industry. Despite the fact that James Gosling and Bill Joy stated that C# was just an imitation of Java, while some other critics even called C# a boring repetition that lacks innovation, C# is now standing tall next to all the other platforms used by millions of developers all over the world.

C# is a multi-paradigm programming language encompassing strong typing, as well as imperative, declarative, functional, generic, object-oriented (class-based), and component-oriented programming disciplines. You can use it to build any type of application, whether it is a service, console, desktop, web or even smartphone application.

Each application type requires a specific set of skills on top of standard C# syntax, and finding a great C# programmer, whether full-time or part-time, is not an easy task. If you are looking for a web developer you should expect technical expertise in the HTTP protocol, Web Forms, MVC Framework and Razor View Engine, while some other application will have its own challenges.

This article should help you identify a developer that understands C# in its core. Regardless of the application type, techniques and tips mentioned below should be universal to all C# development experts and they should all be able to demonstrate extensive understanding of these topics.

I’ll try to cover general topics that every developer must be aware of. The purpose of this article is to point to several specific topics. Evaluating knowledge of each of them in depth would require much more than one or two questions.

Generics

Generics were one of the earliest features of the C# language. Generics make it possible to design classes and methods that defer the specification of one or more types until the class or method is declared and instantiated by client code.

Q: Consider the following code, which is part of a console application:

static void Main(string[] args)
{
  DeveloperList listOfDevelopers = new DeveloperList();
  IntegerList listOfNumbers = new IntegerList();
  
  listOfNumbers.DoSomething(5);
  listOfDevelopers.DoSomething(new Developer());
}

public class Developer
{
  public string Name { get; set; }
  public List<string> Skills { get; set; }
}

public class DeveloperList
{
  public void DoSomething(Developer developer)
  {
    Console.WriteLine("Doing something with developer");
  }
}

public class IntegerList
{
  public void DoSomething(Int32 number)
  {
    Console.WriteLine("Doing something with number");
  }
}

Optimize the code in a way to replace DeveloperList and IntegerList with one class named GenericList that will contain single doSomething method. Make sure to handle the case when GenericList is instantiated by an unexpected type.

The solution should be similar to this:

static void Main(string[] args)
{
  GenericList<int> listOfNumbers = new GenericList<int>();
  GenericList<Developer> listOfDevelopers = new GenericList<Developer>();
  GenericList<string> listOfStrings = new GenericList<string>();
  
  listOfNumbers.DoSomething(5);
  listOfDevelopers.DoSomething(new Developer());
  listOfStrings.DoSomething("Whats up");
}

public class Developer
{
  public string Name { get; set; }
  public List<string> Skills { get; set; }
}

class GenericList<T>
{
  public void DoSomething(T value){
  if (value.GetType() == typeof(Int32))
      {
          Console.WriteLine("Doing something with ");
            return;
        }

        if (value.GetType() == typeof(Developer))
        {
            Console.WriteLine("Doing something with developer");
            return;
        }

        Console.WriteLine("I cannot do anything with " + value.GetType().ToString());
  }
}

LINQ

LINQ (Language-Integrated Query) is one of the coolest features in C#. It was introduced in Visual Studio 2008 and it provides extremely powerful query capabilities to C#. LINQ introduces standard patterns for querying and updating data supporting any kind of data store.

Or, in simple words, LINQ enables SQL-like queries against collections of objects in C#.

Q: Assuming that you have a Class Developer defined like this:

class Developer
{
  public string Name { get; set; }
  public List<string> Skills { get; set; }
}

Write a code that would extract all developers that have the “SQL” skill, from a List<Developer> developers.

The answer that you would expect from a developer that understands LINQ would be similar to this:

var results = from d in developers where d.Skills.Contains("SQL") select d;

Developers that are not used to LINQ would probably use standard iteration methods using for, foreach or while combined with if. Similar to this:

var results = new List<Developer>();
foreach (var d in developers)
{
  if (d.Skills.Contains("SQL"))
  results.Add(d);
}

Even though this is a technically correct solution, it would be less desirable due to the complexity of the code.

Lambda Expressions

Lambda expressions are methods that do not require declaration. These are function that are implemented “in-line” with the rest of the code. Lambda expressions are particularly helpful for writing LINQ query expressions.

To create a lambda expression, you specify input parameters (if any) on the left side of the lambda operator =>, and you put the expression or statement block on the other side. For example, the lambda expression x => x * x specifies a parameter named x and returns the value of x squared.

The general definition of lambda expression is:

(parameters) => Code

Q: Complete the following code by implementing the methods Square and Double based on the Calculate delegate and lambda expressions.

delegate int Calculate(int input);
static void Main(string[] args)
{
  int value1 = Square(5);
  int value2 = Double(5);
  
  Console.WriteLine(value1);
  Console.WriteLine(value2);
  
  Console.ReadLine();
}

The expected solution should be as simple as adding two lines of code:

delegate int Calculate(int input);
static void Main(string[] args)
{
  Calculate Square = x => x * x;  // NEW
  Calculate Double = x => x * 2;  // NEW
  
  int value1 = Square(5);
  int value2 = Double(5);
  
  Console.WriteLine(value1);
  Console.WriteLine(value2);
  
  Console.ReadLine();
}

The Calculate delegate is declared to return Int and accept one Int as a parameter, so Square and Double methods just implemented the proper calculations.

Named Arguments

Named arguments free you from the need to remember or to look up the order of parameters in the parameter lists of called methods. The parameter for each argument can be specified by parameter name.

Consider the following code:

static void Main(string[] args)
{
  Console.WriteLine(Power(4, 3)); //64
  Console.WriteLine(Power(3, 4)); //81
}

static double Power(double baseNumber, double power)
{
  return Math.Pow(baseNumber, power);
}

Changing the order of parameters passed to the Power method would produce a different result; 64 one way, versus 81 the other.

Q: Update the code above to produce same result (4 to power of 3 = 64) regardless of the order of parameters passed to the Power method.

The solution for this problem is to pass named parameters. You would have to change the way you call Power.

Console.WriteLine(Power(baseNumber: 4, power: 3)); //64
Console.WriteLine(Power(power: 3, baseNumber: 4)); //64

The only thing you needed to do is add an argument name when passing in the values.

Optional Parameters

The definition of a method, constructor, indexer, or delegate can specify that its parameters are required or that they are optional. Any call must provide arguments for all required parameters, but can omit arguments for optional parameters.

Each optional parameter has a default value as part of its definition. If no argument is sent for that parameter, the default value is used. Optional parameters are defined at the end of the parameter list, after any required parameters. If the caller provides an argument for any one of a succession of optional parameters, it must provide arguments for all preceding optional parameters. Comma-separated gaps in the argument list are not supported.

Q: Extend the Developer class with a boolean property named Enabled and a constructor that will accept name and the optional enabled value.

public class Developer
{
  public string Name { get; set; }
  public List<string> Skills { get; set; }
}

The expected solution would be:

public class Developer
{
  public Developer(string name, bool enabled=true)
  {
    Name = name;
    Enabled = enabled;
  }
  public string Name { get; set; }
  public bool Enabled { get; set; }
  public List<string> Skills { get; set; }
}

Use of the optional enabled parameter is shown in the following example:

Developer elvis = new Developer("Elvis");       //elvis.Enabled = true
Developer mick = new Developer("Mick", false);  //mick.Enabled = false

Asynchronous Processing

Asynchrony is essential for activities that are potentially blocking, such as when your application accesses network resources. Access to a network resource sometimes is slow or delayed. If such an activity is blocking a synchronous process, the entire application must wait. In an asynchronous process, the application can continue with other work that doesn’t depend on the network resource until the potentially blocking task finishes.

Visual Studio 2012 introduced a simplified approach, async programming, that leverages asynchronous support in the .NET Framework 4.5 and the Windows Runtime. The compiler does the difficult work that the developer used to do, and your application retains a logical structure that resembles synchronous code. As a result, you get all the advantages of asynchronous programming with a fraction of the effort.

The async and await keywords in C# are the heart of async programming. By using those two keywords, you can use resources in the .NET Framework or the Windows Runtime to create an asynchronous method almost as easily as you create a synchronous method. Asynchronous methods that you define by using async and await are referred to as async methods.

The following example shows an async method.

async Task<int> AccessTheWebAsync()
{
  HttpClient client = new HttpClient();
  Task<string> getStringTask = client.GetStringAsync("https://www.toptal.com");
  DoIndependentWork();
  string urlContents = await getStringTask;
  return urlContents.Length;
}

Q: What would be the output of the following code? Explain your answer.

static string statement = "Start";

static async Task<string> SayAwaited()
{
  await Task.Delay(5000);
  statement = "Awaited";
  Console.WriteLine(statement);
  return statement;
}

static async Task<string> SayDelayed()
{
  Thread.Sleep(1000);
  statement = "Delayed";
  Console.WriteLine(statement);
  return statement;
}

static void Main(string[] args)
{
  SayAwaited();
  SayDelayed();
  Console.WriteLine("Final: " + statement);
  Console.ReadLine();
}

After five seconds of the application being paused, the output of this code would be:

Delayed
Final: Delayed
Awaited

Note: The first “Delayed” will show up after a delay of one second.

The reason for this is in the way async methods are handled in C#, and the difference between Task.Delay and Thread.Sleep. The SayAwaited method will execute like any other method until it reaches the await command. At this point, C# will start another thread for executing Task.Delay on the new thread, while releasing current thread to proceed with next action, which is SayDelayed. After putting the main thread to sleep for one second, SayDelayed will set the value for the statement and execution will proceed with the remaining commands, WriteLine and ReadLine. While this is all happening, SayAwaited will be nicely paused in its own thread, and after 5 seconds it will set statement to “Awaited”, produce its own output, and return.

Q: Would there be any difference if statement = "Awaited" would be execute before await command? Explain your answer.

static async Task<string> SayAwaited()
{
  statement = "Awaited";
  await Task.Delay(5000);
  Console.WriteLine(statement);
  return statement;
}

In this case, the output would be the following:

Delayed
Final: Delayed
Delayed

The reason for this is that the “Awaited” value is assigned to statement before the await command is called. By the time Console.WriteLine(statement); in SayAwaited is executed, the value of statement has already been updated by the SayDelayed method.

Stay Sharp!

C# came in as a new kid on the block in web development. At first it was ignored, then it was ridiculed, then it was fought against. Now it continues to win over developers all over the world. The direct result of this growth is the large number of developers that are using C# code.

This article referenced topics that every expert C# developer should master. Make sure to cover these topic when you are looking for a great C# developer, and you will be one step closer to identifying the best of the best.

Top C# Developers are in High Demand.

Start Hiring