C#

Hire the Top 3% of Freelance C# Developers

Toptal是一个面向顶级c#开发人员的市场, engineers, programmers, coders, architects, and consultants. 顶级公司和初创公司选择Toptal c#自由职业者来完成他们的关键任务软件项目.

无风险试用,满意才付款.

雇佣自由的c#开发人员和工程师

Rory Woods

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since June 5, 2014

Rory是一名软件顾问,提供满足企业需求的解决方案. 他带来了技术技能和经验,不仅指导团队如何构建,还指导团队构建什么. 他在微软web堆栈方面拥有丰富的经验,包括ASP.NET MVC、Web API、SQL Server和Azure.

Show More

Rizwan Rizvi

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since June 13, 2018

Rizwan has a reputation for overcoming complex challenges through clear thinking, innovative approaches, 加强组织不同部门之间的沟通. Throughout his career, 他优化了多样化和分散的IT专业人员团队的工作,并在具有挑战性的环境中始终如一地交付了有利可图的项目.

Show More

Dan Napierski

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since April 28, 2016

Dan是一名专注于区块链技术应用的软件架构师和技术专家. 他拥有多年的专业咨询服务经验,为从初创公司到跨国公司的客户提供服务. 他擅长将严格的测试和防弹代码引入棘手的工程挑战. 他在人工智能的许多方面都有深厚的专业知识, blockchain, machine learning, and automation.

Show More

Cheryl Hoskins

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since February 4, 2016

谢丽尔是一名具有强大沟通技巧的开发人员,她寻求提供令客户满意的软件解决方案. 她喜欢使用React、Node.js, REST APIs, GraphQL, SQL, MongoDB, 和JavaScript最近准备开始把她的技能为你工作. 除了她的技术背景, Cheryl has an MBA and can translate your business requirements into quality software solutions.

Show More

Scott Hankinson

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since June 18, 2020

斯科特开发的技术被微软(Microsoft)和谷歌(google)等公司使用&P Global. 他为面向大型实体的公司开发了软件集成, 以及帮助公司通过IPO上市. 斯科特有设计的能力, develop, 并将数据库解决方案交付到生产环境中. 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

IndiaToptal的自由c#开发人员 Since April 30, 2014

Mukesh拥有超过16年的软件开发和设计经验,专门从事微软技术堆栈和高效开发的能力, scalable, 以及复杂问题的容错解决方案. 他在软件开发周期的各个阶段都有丰富的经验.

Show More

Charles Cook, Ph.D.

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since July 29, 2014

Charles has a Ph.D. 并花了三年时间为NASA开发定制数据处理和分析程序. He specializes in scalable, 企业级应用程序开发和高吞吐量工程解决方案. 他也是GreatVocab的创始人和所有者.为此,他利用数据分析和控制理论中的新概念开发了核心系统.

Show More

Dmitry Pavlov

Freelance C# Developer

RussiaToptal的自由c#开发人员 Since July 16, 2012

Dmitry是一位拥有20多年创作经验的顶尖开发者 .NET web applications. He mostly deals with ASP.NET Core and Blazor (C#, .. NET Core)软件开发和体系结构设计. Dmitry曾9次获得微软MVP(开发者技术)奖,是一位有能力的社区领袖. 他还获得了计算机科学、构造地质学和建模的硕士学位. 客户称他为“编码机器”."

Show More

Claudio Aldana

Freelance C# Developer

United StatesToptal的自由c#开发人员 Since September 12, 2018

Claudio是一位专注于业务成果的经验丰富的IT专家, 还有扎实的工程背景. 他运用数据科学来优化客户满意度, product personalization, and customer churn. Claudio is also a certified SharePoint expert and has worked with prominent Microsoft customers, 帮助他们最大限度地提高安全性, performance, and usability.

Show More

现在注册以查看更多资料.

Start Hiring
经常成对

Get Additional Expertise

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

A Hiring Guide

招聘优秀c#开发人员指南

c#就像一个新来的孩子. At first it was ignored, then it was ridiculed, 然后它就被反对了, 但现在它继续赢得世界各地的开发者. The direct result of this growth is a large number of developers that are using C#. 本指南涵盖了每个c#开发人员都需要掌握的主题, 这在你下次招聘时是必不可少的.

Read Hiring Guide

C# Hiring Resources

Trustpilot
THE TOPTAL ADVANTAGE

在无风险试用后,98%的Toptal客户选择雇用我们的人才.

道达尔的筛选和匹配过程确保卓越的人才与您的精确需求相匹配.

Start Hiring
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
构建一个跨平台的应用程序,在全球范围内使用
Thierry Jakicevic
构建一个跨平台的应用程序,在全球范围内使用
为游戏制作应用程序
Conor Kenney
为游戏制作应用程序
引领数字化转型
Elmar Platzer
引领数字化转型
挖掘实时数据将改变行业的游戏规则
挖掘实时数据将改变行业的游戏规则
What our clients think
Clients Rate Toptal C# Developers4.4 / 5.0截至2023年11月1日,平均有974条评论
Testimonials

没有Toptal就不会有Tripcents. Toptal Projects enabled us to rapidly develop our foundation with a product manager, lead developer, and senior designer. 在60多天的时间里,我们从概念到Alpha. 其速度、知识、专业知识和灵活性是首屈一指的. The Toptal team were as part of tripcents as any in-house team member of tripcents. 他们像其他人一样贡献并拥有开发的所有权. 我们将继续使用Toptal. 作为一家初创公司,它们是我们的秘密武器.

Brantley Pace, CEO & Co-Founder

Tripcents

我对我们与Toptal的合作经验非常满意. The professional I got to work with was on the phone with me within a couple of hours. 在和他讨论了我的项目后,我知道他就是我想要的候选人. 我立即雇用了他,他没有浪费时间就完成了我的项目, 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. 过去很难找到高质量的工程师和顾问. Now it isn't.

Ryan Rockefeller, CEO

Radeeus

Toptal立即理解了我们的项目需求. 我们遇到了一位来自阿根廷的杰出自由职业者, from Day 1, 沉浸在我们的行业中, 与我们的团队无缝融合, understood our vision, 并产生了一流的结果. Toptal使与高级开发人员和程序员的联系变得非常容易.

Jason Kulik, Co-Founder

ProHatch

As a small company with limited resources we can't afford to make expensive mistakes. Toptal为我们提供了一位经验丰富的程序员,他能够立即投入工作并开始做出贡献. 这是一次很棒的经历,我们会马上再来一次.

Stuart Pocknee , Principal

现场专用软件解决方案

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. 这个过程迅速而有效.

Abner Guzmán Rivera,首席技术官和首席科学家

Photo Kharma

Sergio是一个很棒的开发者. 一流,反应迅速,工作效率高.

Dennis Baldwin,首席技术专家和联合创始人

PriceBlink

和Marcin一起工作是一种乐趣. He is competent, professional, flexible, 并且非常迅速地理解需要什么以及如何实现它.

André Fischer, CTO

POSTIFY

我们需要一位能立即开始我们项目的专业工程师. 西马纳斯的工作超出了我们的预期. 不需要采访和追踪专家开发人员是一种非常节省时间的方法,并且让每个人都对我们选择切换平台以使用更健壮的语言感到更舒服. Toptal使这一过程变得简单方便. Toptal现在是我们寻求专家级帮助的首选之地.

Derek Minor, Web开发高级副总裁

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

我们与Toptal合作非常愉快. They paired us with the perfect developer for our application and made the process very easy. 它也很容易超出最初的时间框架, 我们可以在整个项目中保持同一个承包商. We definitely recommend Toptal for finding high quality talent quickly and seamlessly.

Ryan Morrissey, CTO

应用商业技术有限责任公司

我对Toptal印象深刻. 我们的开发人员每天都和我交流,他是一个非常强大的程序员. 他是一个真正的专业人士,他的工作非常出色. 5 stars for Toptal.

Pietro Casoar, CEO

Ronin Play Pty Ltd

与Toptal合作是一次很棒的经历. 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. 与我一起工作的开发人员不仅提供高质量的代码, 但他也提出了一些我没有想到的建议. 我很清楚,阿莫里知道自己在做什么. Highly recommended!

George Cheng, CEO

Bulavard, Inc.

As a Toptal qualified front-end developer, I also run my own consulting practice. 当客户来找我帮忙填补他们团队中的关键角色时, Toptal是我唯一愿意推荐的地方. Toptal的所有候选人都是精英中的精英. Toptal是我在近5年的专业在线工作中发现的性价比最高的网站.

Ethan Brooks, CTO

Langlotz Patent & Trademark Works, Inc.

In Higgle's early days, 我们需要一流的开发者, at affordable rates, in a timely fashion. Toptal delivered!

Lara Aldag, CEO

Higgle

Toptal能让你轻松找到合适的人选,让你放心,因为他们有能力. I would definitely recommend their services to anyone looking for highly-skilled developers.

Michael Gluckman,数据经理

Mxit

Toptal’s ability to rapidly match our project with the best developers was just superb. 开发人员已经成为我们团队的一部分, 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让寻找合格的工程师变得轻而易举. 我们需要一个有经验的ASP.. NET MVC架构来指导我们的启动应用程序的开发, Toptal在不到一周的时间里为我们找到了三位优秀的候选人. 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. 这在其他平台上是不可能实现的.

Franco Arda, Co-Founder

WhatAdsWork.com

Toptal offers a no-compromise solution to businesses undergoing rapid development and scale. 我们通过Toptal签约的每一位工程师都迅速融入了我们的团队,并在保持惊人的开发速度的同时,将他们的工作保持在最高的质量标准.

Greg Kimball, Co-Founder

nifti.com

如何通过Toptal招聘c#开发人员

1

与我们的行业专家交谈

Toptal的工程总监将与您一起了解您的目标, technical needs, and team dynamics.
2

与精心挑选的人才一起工作

几天之内,我们将为您的项目介绍合适的c#开发人员. 平均匹配时间在24小时以下.
3

The Right Fit, Guaranteed

与你的新c#开发人员一起试用一段时间(如果满意才支付报酬), 在订婚前确保他们是合适的人选.

寻找拥有相关技能的专家

在我们的人才网络中访问大量熟练的开发人员,并在48小时内雇用最优秀的3%.

FAQs

  • Toptal c#开发者有何不同?

    At Toptal, 我们对c#开发人员进行了彻底的筛选,以确保我们只为您匹配最优秀的人才. Of the more than 200,每年有5000人申请加入Toptal网络, fewer than 3% make the cut. 你将与工程专家(而不是一般的招聘人员或人力资源代表)一起了解你的目标, technical needs, and team dynamics. 最终的结果是:经过专家审查的人才从我们的网络,定制匹配,以满足您的业务需求.

  • 我可以在不到48小时内通过Toptal雇佣c#开发人员吗?

    取决于可用性和进度, 你可以在注册后48小时内开始与c#开发人员一起工作.

  • Toptal c#开发人员的无风险试用期是多长?

    我们确保您和您的c#开发人员之间的每次约定都以长达两周的试用期开始. 这意味着你有时间确认订婚是否成功. 如果你对结果完全满意, we’ll bill you for the time and continue the engagement for as long as you’d like. 如果您不完全满意,我们不会向您收费. From there, we can either part ways, 或者我们可以为您提供另一位可能更合适的专家,我们将与他开始第二轮谈判, no-risk trial.

Share
C#

如何聘请优秀的c#开发人员

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, 我们听说1999年将是世界末日,因为它的名字中有一个倒写的666. In such turbulent times, 当时很多人在地下室里堆食物, 希望世界末日不会找到他们, 有几个有远见的人还在发明一些很酷的东西. One of them is Anders Hejlsberg, 是谁召集了微软的开发团队,创造了Cool, 哪个是新的类c语言的第一个版本, 后来被命名为c#(发音为“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 认为c#只是对Java的模仿, while some other critics even called C# a boring repetition that lacks innovation, c#现在在世界各地数以百万计的开发人员使用的所有其他平台旁边站得很高.

c#是一种包含强类型的多范式编程语言, as well as imperative, declarative, functional, generic, 面向对象(基于类), 以及面向组件的编程原则. 您可以使用它来构建任何类型的应用程序, whether it is a service, console, desktop, Web或甚至智能手机应用程序.

Each application type requires a specific set of skills on top of standard C# syntax, 找到一个优秀的c#程序员, 无论是全职还是兼职, is not an easy task. 如果你正在寻找一个web开发人员,你应该期望在HTTP协议的技术专长, Web Forms, MVC框架和Razor视图引擎, 而其他一些应用程序将有自己的挑战.

This article should help you identify a developer that understands C# in its core. 无论应用程序类型如何, 下面提到的技术和技巧对所有c#开发专家来说都应该是通用的,他们都应该能够展示出对这些主题的广泛理解.

我将尝试涵盖每个开发人员都必须了解的一般主题. 本文的目的是指出几个特定的主题. Evaluating knowledge of each of them in depth would require much more than one or two questions.

Generics

泛型是c#语言最早的特性之一. 泛型可以设计延迟指定一个或多个类型的类和方法,直到类或方法由客户端代码声明和实例化.

问:考虑以下代码,这是控制台应用程序的一部分:

静态void Main(string[] args)
{
  listOfDevelopers = new DeveloperList();
  listOfNumbers = new IntegerList();
  
  listOfNumbers.DoSomething(5);
  listOfDevelopers.DoSomething(新开发人员());
}

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

public class DeveloperList
{
  DoSomething(开发者)
  {
    Console.WriteLine(“与开发人员一起做某事”);
  }
}

public class IntegerList
{
  public void DoSomething(Int32 number)
  {
    Console.WriteLine(“做一些与数字有关的事情”);
  }
}

以优化的方式替换代码 DeveloperList and IntegerList with one class named GenericList that will contain single doSomething method. 一定要处理好这个案子 GenericList 由意外类型实例化.

解决方案应该类似于这样:

静态void Main(string[] args)
{
  GenericList listOfNumbers = new GenericList();
  GenericList listOfDevelopers = new GenericList();
  GenericList listOfStrings = new GenericList();
  
  listOfNumbers.DoSomething(5);
  listOfDevelopers.DoSomething(新开发人员());
  listOfStrings.DoSomething("Whats up");
}

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

class GenericList
{
  public void DoSomething(T value){
  if (value.GetType() == typeof(Int32)
      {
          Console.WriteLine(“做某事”);
            return;
        }

        if (value.GetType() == typeof(Developer))
        {
            Console.WriteLine(“与开发人员一起做某事”);
            return;
        }

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

LINQ

LINQ(语言集成查询)是c#中最酷的特性之一. 它是在Visual Studio 2008中引入的,它为c#提供了极其强大的查询功能. LINQ引入了查询和更新数据的标准模式,支持任何类型的数据存储.

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

问:假设你有一个班级 Developer defined like this:

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

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

你期望从一个理解LINQ的开发人员那里得到的答案是类似的:

在开发者中,Var results = from 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();
Foreach(开发人员的变量)
{
  if (d.Skills.Contains("SQL"))
  results.Add(d);
}

尽管这是一个技术上正确的解决方案, 由于代码的复杂性,这是不太可取的.

Lambda Expressions

Lambda表达式是不需要声明的方法. 这些是与其余代码“内联”实现的函数. Lambda表达式对于编写LINQ查询表达式特别有帮助.

创建lambda表达式, you specify input parameters (if any) on the left side of the lambda operator =>, 然后把表达式或语句块放在另一边. 例如,lambda表达式 x => x * x 指定名为 x and returns the value of x squared.

lambda表达式的一般定义为:

(parameters) => Code

Q:通过实现这些方法来完成以下代码 Square and Double based on the Calculate 委托和lambda表达式.

委托int计算(int输入);
静态void Main(string[] args)
{
  int value1 = Square(5);
  int value2 = Double(5);
  
  Console.WriteLine(value1);
  Console.WriteLine(value2);
  
  Console.ReadLine();
}

预期的解决方案应该像添加两行代码一样简单:

委托int计算(int输入);
静态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 委托被声明为返回 Int and accept one Int as a parameter, so Square and Double 方法只是实现了适当的计算.

Named Arguments

命名参数使您不必在被调用方法的参数列表中记住或查找参数的顺序. 每个实参的形参可以通过形参名指定.

考虑下面的代码:

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

静态双功率(双baseNumber,双功率)
{
  return Math.Pow(baseNumber, power);
}

更改传递给参数的顺序 Power method would produce a different result; 64 one way, versus 81 the other.

Q:更新上面的代码以产生相同的结果(4的3次方= 64),而不管传递给参数的顺序如何 Power method.

这个问题的解决方案是传递命名参数. 你得改变打电话的方式 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

方法的定义, constructor, indexer, or delegate can specify that its parameters are required or that they are optional. 任何调用都必须为所有必需的参数提供实参, 但是可以省略可选参数的参数.

每个可选参数都有一个默认值作为其定义的一部分. 如果没有为该参数发送参数,则使用默认值. 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, 它必须为前面的所有可选参数提供实参. 不支持参数列表中以逗号分隔的空格.

Q: Extend the Developer 类,其布尔属性名为 Enabled 以及一个可以接受的构造函数 name and the optional enabled value.

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

预期的解决方案是:

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 Skills { get; set; }
}

Use of the optional enabled 参数,示例如下:

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

Asynchronous Processing

异步对于潜在阻塞的活动是必不可少的, 例如当应用程序访问网络资源时. 对网络资源的访问有时很慢或延迟. If such an activity is blocking a synchronous process, the entire application must wait. In an asynchronous process, 应用程序可以继续执行不依赖于网络资源的其他工作,直到潜在的阻塞任务完成.

Visual Studio 2012引入了一种简化的方法, async programming, 的异步支持 .NET Framework 4.5 and the Windows Runtime. 编译器完成了开发人员过去所做的困难工作, 您的应用程序保留了类似于同步代码的逻辑结构. 因此,您只需付出很少的努力就能获得异步编程的所有优点.

The async and await c#中的关键字是异步编程的核心. 通过使用这两个关键字,您可以使用 .. NET框架或Windows运行时创建异步方法几乎和创建同步方法一样容易. 定义的异步方法 async and await 被称为异步方法.

下面的例子展示了一个async方法.

async Task AccessTheWebAsync()
{
  HttpClient client = new HttpClient();
  Task getStringTask = client.GetStringAsync (" http://2.ragmovies.com");
  DoIndependentWork();
  字符串urlContents = await getStringTask;
  return urlContents.Length;
}

问:下面代码的输出是什么? Explain your answer.

静态字符串语句= "Start";

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

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

静态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

注意:第一个“延迟”将在延迟一秒后显示.

这样做的原因是在路上 async 方法是在c#中处理的,而两者的区别 Task.Delay and Thread.Sleep. The SayAwaited 方法将像任何其他方法一样执行,直到它到达 await command. 此时,c#将启动另一个线程来执行 Task.Delay on the new thread, while releasing current thread to proceed with next action, which is SayDelayed. 让主线程休眠一秒钟后, SayDelayed will set the value for the statement 剩下的命令将继续执行, WriteLine and ReadLine. 当这一切发生的时候, SayAwaited 将很好地暂停在自己的线程,并在5秒后,它将设置 statement 到“待定”,产生它自己的输出,并返回.

问:会有什么不同吗 statement = "Awaited" would be execute before await command? Explain your answer.

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

在本例中,输出如下:

Delayed
Final: Delayed
Delayed

这样做的原因是“等待”值被分配给 statement before the await command is called. By the time Console.WriteLine(statement); in SayAwaited is executed, the value of statement 已经被更新了 SayDelayed method.

Stay Sharp!

c#作为web开发领域的一个新生事物出现了. 起初,它被忽视,然后被嘲笑,然后被反对. 现在它继续赢得全世界开发者的青睐. The direct result of this growth is the large number of developers that are using C# code.

本文引用了每个c#开发专家都应该掌握的主题. 当你在寻找一个优秀的c#开发人员时,一定要涵盖这些主题, 这样你就离甄别精英中的精英更近了一步.

顶级c#开发人员需求量很大.

Start Hiring