C#

雇用 Top 3%自由c#开发人员

Toptal.是Top C#开发人员,工程师,程序员,编码器,架构师和顾问的市场。顶级公司和初创公司选择Toptal C#自由职业者为他们的关键任务软件项目。

无风险审判,仅在满意时付款。

客户率 Toptal. C# Developers4.4 / 5.0平均截至2021年3月30日的579条评论

通过领先的品牌和初创公司信任

聘请自由职业者C#开发人员和工程师

罗里森林

自由c#开发人员

美国自从2014年3月25日起在Toptal的自由职业者C#开发商

Rory是一种提供解决方案以填补企业需求的软件顾问。他带来了技术技能,并经历了指导团队,而不仅仅是如何构建,而是建立什么。他在Microsoft Web堆栈中拥有丰富的体验,包括ASP.NET MVC,Web API,SQL Server和Azure。

展示更多

Rizwan Rizvi.

自由c#开发人员

美国自从2018年5月21日起在Toptal的自由职业者C#开发商

Rizwan通过明确的思维,创新方法,加强组织不同部分之间的沟通,克里兹万具有克服复杂挑战。在他的职业生涯中,他优化了IT专业人员多样化和分散团队的努力,一直在充满挑战环境中有利地交付项目。

展示更多

丹纳帕尔斯基

自由c#开发人员

美国自从2015年12月20日以来Toptal的自由职业者C#开发商

丹是一种软件架构师和技术专业专业专注于区块链技术的应用。他拥有多年的经验,为客户提供专业的咨询服务,从初创公司到全球公司。他专门为艰难的工程挑战带来严格的测试和防弹码。他在人工智能,区块链,机器学习和自动化的许多方面都有深刻的专业知识。

展示更多

Cheryl Hoskins.

自由c#开发人员

美国自从2015年12月31日以来Toptal的自由职业者C#开发商

Cheryl是一个具有强大沟通技巧的开发人员,旨在提供令客户的软件解决方案。她最近享受了与React,Node.js,Rest Apis,GraphQL,SQL,MongoDB和Javascript合作,并准备开始让她的技能为您工作。除了她的技术背景外,Cheryl还有一个MBA,可以将您的业务需求转化为优质的软件解决方案。

展示更多

斯科特汉森逊

自由c#开发人员

美国自从2017年6月20日起在Toptal的自由职业者C#开发商

Scott已经生产了Microsoft和S这样的公司使用的技术&P全球。他为销售给更大实体的公司以及通过IPO进行公众的公司开发了软件。斯科特有能力设计,开发和将数据库解决方案融入生产环境。他能够控制软件开发团队的各个方面作为建筑师,开发者和项目领导者。

展示更多

Mukesh Agrawal.

自由c#开发人员

印度自从2014年3月17日起在Toptal的自由职业者C#开发商

Mukesh拥有超过16年的软件开发和设计经验(主要是与Microsoft技术堆栈),并探索能够为复杂问题开发高效,可扩展和容错解决方案。他拥有丰富的软件开发周期阶段的经验。

展示更多

查尔斯厨师,博士。

自由c#开发人员

美国自从2014年5月30日起在Toptal的自由C#开发商

查尔斯有一个博士学位。在航空航天工程中,并花了三年的三年,为美国宇航局开发定制数据处理和分析方案。他专注于可扩展,企业级应用程序开发和工程解决方案,以获得高吞吐量。他也是GreatVocab.com的创始人和所有者,他在其中开发了使用数据分析和控制理论的新颖概念的核心系统。

展示更多

德米特里帕夫洛夫

自由c#开发人员

俄罗斯自从2012年6月14日以来Toptal的自由C#开发商

Dmitry是一个顶级开发人员,具有超过17年的经验,创建.NET Web应用程序。他这些天大多数涉及ASP.NET核心和Blazor(C#,.NET核心)软件开发堆栈。 DMITRY已收到Microsoft MVP(开发人员技术)奖励八次,并且是一个有力的社区领导者。他还获得了计算机科学与结构地质和建模的科学学位硕士学位。客户致电他"The Coding Machine."

展示更多

Claudio Aldana

自由c#开发人员

美国自从2018年6月15日起在Toptal的自由职业者C#开发商

Claudio是一款经验丰富的IT专家,专注于商业成果,以及具有实心的工程背景。他'S应用数据科学优化客户满意度,产品个性化和客户流失。 Claudio也是一位经过认证的SharePoint专家,并致力于突出的Microsoft客户,帮助他们最大限度地提高安全性,性能和可用性。

展示更多

克雷格温格

自由c#开发人员

美国自从2015年5月12日起在Toptal的自由职业者C#开发商

克雷格一直是一个积极的自由扒窃系统工程师,超过十年。他在各种产品上拥有广泛的嵌入式系统硬件和固件开发经验,包括医疗,通信,工业自动化,电机控制,消费电子产品和物联网。

展示更多

尼克伊万诺夫

自由c#开发人员

俄罗斯自从2015年7月19日起以来Toptal的自由C#开发商

尼克是一位高级软件开发人员'S花费了十多年,使用.NET,SQL,C#,JavaScript,HTML和CSS。他是可以肉体肉体的开发人员的类型,也可以建立一个坚实的后端。他'S与数据库一起工作 - 与SQL大多数,但也与PostgreSQL,MongoDB,Oracle和Sybase遇到过。尼克可以清楚而简洁地解释他的工作流程,并渴望开始他的职业生涯做自由职业的遥控作品。

展示更多

立即注册以查看更多档案。

开始招聘

需要一个专业管理的软件开发项目
从开始到结束?

无论您的业务需求是什么,我们都会策划全球顶级人才的全面托管团队,为您提供最高质量的解决方案。

招聘指南

雇用伟大的C#开发人员指南

C#作为街区的新小孩进来。起初忽略了,那么它被嘲笑,然后它被反对,但现在它继续赢得世界各地的开发商。这种增长的直接结果是使用C#的大量开发人员。本指南涵盖了每个C#开发人员需要掌握的主题,并且在让您的下一个雇用时是必不可少的。

阅读招聘指南

C#招聘资源

TrustPilot.
Toptal. in the press

...允许公司快速组装具有特定项目的合适技能的团队。

尽管对编码人员的需求加速了,Toptaltal旨在自行为几乎常春藤联盟级审查。

我们的客户
构建一个全球使用的跨平台应用程序
Thierry Jakicevic.
构建一个全球使用的跨平台应用程序
1
2
3
为游戏创建一个应用程序
Conor Kenney.
为游戏创建一个应用程序
1
2
3
领导数字转型
Elmar Platzer.
领导数字转型
1
2
3
推荐书

三普国不会'T存在没有顶尖。顶部项目使我们能够用产品经理,铅开发商和高级设计师迅速发展我们的基础。在60多天内,我们从概念到阿尔法。速度,知识,专业知识和灵活性是秒数。 Toptaltal团队作为三级队员的三级队员的一部分。他们贡献并就像其他人一样贡献并获得了发展的所有权。我们将继续使用TOPTAL。作为一个启动,他们是我们的秘密武器。

布兰特利步长,首席执行官& Co-Founder

三级

我对Toptaltal的经验非常满意。我必须与我一起工作的专业人士在几个小时内与我一起。我知道在与他讨论我的项目后,他是我想要的候选人。我立即雇了他,他浪费了浪费时间来到我的项目,甚至通过添加一些优秀的设计元素来加强额外的英里,以增强我们的整体外观。

Paul Fenley,导演

k dunn.& Associates

我与令人难以置信的 - 聪明,驱动和响应性的开发人员。它曾经很难找到优质的工程师和顾问。现在它是't.

Ryan Rockefeller,CEO

辐射群

Toptal.立即了解我们的项目。我们与阿根廷的特殊自由职业者与阿根廷,从第1天沉浸在我们的行业中,与我们的团队无缝混合,理解我们的愿景,并产生了顶级缺口结果。 Toptal与卓越的开发人员和程序员相连,非常容易。

Jason Kulik,联合创始人

PROHATCH.

作为一个有限资源的小公司,我们可以'不起赚得昂贵的错误。 Toptal为我们提供了一个经验丰富的程序员,他们能够击中地面运行并立即开始贡献。这是一个伟大的经历和我们'd再次在心跳中重复。

斯图尔特Pocknee,校长

站点特定的软件解决方案

我们使用Toptal聘请开发人员,具有广泛的亚马逊网络服务体验。我们采访了四名候选人,其中一个候选人竟然有适合我们的要求。该过程快速有效。

ABNERGUZMÁNVILLA,CTO和首席科学家

照片kharma.

Sergio是一个令人敬畏的开发人员。顶级陷波,响应,并有效地完成了工作。

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

PriceBlink.

与马林一起工作是一种快乐。他是有能力,专业,灵活的,非常快速地了解所需的内容以及如何实现它。

和réFischer,CTO

发布

我们需要一个专家工程师,他们可以立即启动我们的项目。辛巴纳斯与他的工作超出了我们的期望。不得不采访和追逐专家开发商是一个优秀的时光,让每个人都对我们的选择感到更加舒适,以改变平台来利用更强大的语言。 Toptog易于方便地制作了该过程。 Toptal现在是我们寻找专家级别帮助的第一名。

Web开发的高级VP德里克未成年人

NetWorld Media Group.

Toptal.'S开发人员和建筑师都非常专业,易于使用。他们生产的解决方案相当定价和最高品质,减少了推出的时间。再次感谢,Toptal。

Jeremy Wessels,CEO

Kognosi.

我们拥有Toptal的伟大体验。他们将我们与完美的开发人员配对,为我们的应用程序并使过程非常容易。它也很容易超出初始时间范围,我们能够在我们的项目中保持相同的承包商。我们绝对推荐顶尖,用于快速和无缝地找到高质量的人才。

Ryan Morrissey,CTO

应用业务技术,LLC

I'M Toptal令人难以置信地印象深刻。我们的开发人员每天与我沟通,是一个非常强大的编码器。他'真正的专业人士,他的工作很棒。顶部5星。

Pietro Casoar,CEO

Ronin Play Pty Ltd

与Toptal一起工作是一个很好的体验。在使用它们之前,我花了很长时间采访其他自由职业者和尚未'找到我需要的东西。与Toptal一起参与后,他们在几天内与完美的开发人员匹配。开发商I.'m不仅可以提供质量代码,而且他还提出了我达到的事情的建议't thought of. It'对我来说清楚,阿拉夫里知道他在做什么。强烈推荐!

乔治城,首席执行官

Buravard,Inc。

作为顶级合格的前端开发人员,我也运营了自己的咨询练习。当客户来找我来帮助填补他们的团队上的关键角色时,Toptal是我唯一舒适的推荐的地方。 Toptal.'整个候选池是最好的。 Toptal是我的最佳价值我'在近一年的专业在线工作中发现了。

Ethan Brooks,CTO

Langlotz专利&商标作品,Inc。

在嘻嘻哈哈'早期,我们以及时的方式,我们需要一流的开发商,以实惠的价格。 Toptal送货!

Lara Aldag,CEO

h

Toptal.让候选人非常容易,让您能使他们有能使他们有能力提供。我肯定会向寻求高技能开发人员的人推荐他们的服务。

Michael Gluckman,数据经理

mxit.

Toptal.迅速匹配我们的项目与最佳开发人员的能力只是一流的。开发商已成为我们团队的一部分,我对他们中的每一个都证明了专业承诺的水平。对于那些希望远程工作的人与最好的工程师来说,看起来不仅仅是Toptaltal。

Laurent Alis,创始人

临身

Toptal.让找到合格的工程师微风。我们需要经验丰富的ASP.NET MVC架构师来指导我们的启动应用程序的开发,并在不到一周内为我们提供三位伟大的候选人。在我们选择后,工程师立即在线并击中地面运行。它比我们自己发现和兽医候选人更快和更容易。

杰夫凯利,联合创始人

协调解决方案

我们需要在Scala中的一些短期工作,Toptal在24小时内发现了我们一个伟大的开发人员。这不仅仅是通过任何其他平台都无法实现。

Franco Arda,联合创始人

whatadswork.com

Toptal.为正在进行快速发展和规模的企业提供禁令解决方案。每个工程师我们'通过Toptal签约已经很快集成到我们的团队中,并将其工作持有最高标准的质量,同时保持炽热的发展速度。

Greg Kimball,联合创始人

nifti.com.

如何通过Toptal雇用C#开发人员

1

与我们的行业专家交谈

Tophteal Engineering主任将与您合作,了解您的目标,技术需求和团队动态。
2

与手工选择的人才合作

在几天内,我们'LL向您介绍您的项目的正确C#开发人员。平均匹配时间在24小时内。
3

右边合身,保证

与您的新C#开发人员合作进行试用期(仅在满意时支付),确保它们'在开始参与之前,右边适合。

常见问题解答

  • Toptal C#开发人员如何不同?

    在Toptal,我们彻底屏蔽了我们的C#开发人员,以确保我们与最高口径的人才相匹配。每年申请加入Toptal Network的100,000多人,削减少于3%。您将与工程专家(从不泛化招聘人员或人力资源代表)合作,了解您的目标,技术需求和团队动态。最终结果:来自我们网络的专家审计人才,习惯符合您的业务需求。 现在开始。

  • 我可以在不到48小时穿过Toptaltal雇用C#开发人员吗?

    根据可用性以及您可以进行的快速,您可以在注册的48小时内开始使用C#开发人员。 现在开始。

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

    我们确保您和C#开发人员之间的每次参与开始于最多两周的试用期。这意味着您有时间确认订婚将是成功的。如果您对结果完全满意,我们会为您收取时间并继续接触,只要您想要。如果你没有完全满意,你将不会收取费用。从那里,我们可以通过部分方式,或者我们可以为您提供可能更适合的另一个专家,并与我们将开始第二名,无风险的审判。 现在开始。

分享
C#

如何聘请一个伟大的C#开发人员

记住这一点 Y2K错误?显然,世界被认为是由于在地球上的计算机网络造成严重破坏。在此之前只有一年,我们听取了1999年将标志着世界末日的公告,因为它的名字是倒666。在这种动荡的时期,当许多人都在他们的地下室堆积食物时,希望阿尔齐的人不会找到它们,有一些差异仍然发明一些很酷的东西。其中一个是 Anders Hejlsberg.谁聚集了一个微软开发人员团队并创建了很酷的,这是新的新的C样对象面向语言的第一个版本,后来被命名为C#(发音为“c sharp”)。

14年和5个版本后,C#是该行业中最流行的语言之一。尽管如此 詹姆斯戈斯林比尔乔伦 据说C#只是对Java的模仿,而其他一些批评甚至称为C#缺乏创新的无聊重复,C#现在站在全球数百万开发商使用的所有其他平台旁边。

C#是一种多范式编程语言,包括强大打字,以及势在必行,声明,功能,通用,面向对象(基于类)和面向组件的编程学科。您可以使用它来构建任何类型的应用程序,无论是服务,控制台,桌面,Web还是甚至智能手机应用程序。

每个应用程序类型都需要在标准C#语法之上的特定技能集,并找到一个伟大的C#程序员,无论是全职还是兼职,都不是一项简单的任务。如果您正在寻找Web开发人员,您应该期望HTTP协议,Web表单,MVC框架和剃刀视图引擎中的技术专长,而其他一些应用程序将有自己的挑战。

本文应该帮助您识别在其核心中了解C#的开发人员。无论应用类型,下面提到的技术和提示都应普遍于所有C#开发专家,他们都应该能够展示对这些主题的广泛理解。

我会尝试涵盖每个开发人员必须了解的一般话题。本文的目的是指向几个特定主题。深入评估每个人的知识需要多于一个或两个问题。

仿制

泛型是C#语言的最早功能之一。泛型可以使可以设计推迟一个或多个类型的规范的类和方法,直到客户端代码声明和实例化。

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

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 DeveloperListIntegerList 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.

解决方案应该类似于:

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.(语言集成查询)是C#中最酷的功能之一。它在Visual Studio 2008中介绍,它为C#提供了极其强大的查询功能。 LINQ引入了用于查询和更新支持任何类型数据存储的数据的标准模式。

或者,以简单的单词,Linq使SQL样查询能够在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.

您希望从理解LINQ的开发人员期望的答案与此类似:

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

开发人员 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);
}

即使这是一种技术上正确的解决方案,它也会因代码的复杂性而不太理想。

lambda表达式

Lambda表达式是不需要声明的方法。这些是与其余代码“在线”实现的函数。 Lambda表达式对编写LINQ查询表达式特别有用。

要创建Lambda表达式,请指定Lambda运算符左侧的输入参数(如果有)=>, 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 和 returns the value of x squared.

Lambda表达的一般定义是:

(parameters) => Code

Q: Complete the following code by implementing the methods SquareDouble 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();
}

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

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 和 accept one Int as a parameter, so SquareDouble methods just implemented the proper calculations.

命名论据

命名的参数自由您从需要记住或查找名为MaClift的参数列表中的参数顺序。可以通过参数名称指定每个参数的参数。

考虑以下代码:

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

您唯一需要做的是在传递值时添加参数名称。

可选参数

方法,构造函数,索引器或委托的定义可以指定所需的参数或它们是可选的。任何呼叫都必须为所有必需参数提供参数,但可以省略可选参数的参数。

每个可选参数都具有默认值作为其定义的一部分。如果未为该参数发送参数,则使用默认值。 在任何必需参数之后,在参数列表的末尾定义可选参数。如果调用者为任何一个连续的可选参数提供参数,则它必须为所有前面的可选参数提供参数。不支持参数列表中的逗号分隔间隙。

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

public class Developer
{
  public string Name { get; set; }
  public List<string> 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<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

异步处理

Asynchrony对于可能阻止的活动至关重要,例如当您的应用程序访问网络资源时。访问网络资源有时会缓慢或延迟。如果这样的活动阻止了同步过程,则整个应用程序必须等待。在异步过程中,应用程序可以继续使用其他工作,直到可能阻止任务完成之前不依赖于网络资源。

Visual Studio 2012引入了一种简化的方法,异步编程,可利用.NET Framework 4.5和Windows运行时中的异步支持。编译器是开发人员常常执行的困难工作,以及您的应用程序保留了类似于同步代码的逻辑结构。因此,您可以通过一小部分努力获得异步编程的所有优点。

The asyncawait 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 asyncawait are referred to as async methods.

以下示例显示了异步方法。

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

问:以下代码的输出是什么?解释你的答案。

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();
}

在暂停应用程序的五秒钟后,此代码的输出将是:

Delayed
Final: Delayed
Awaited

注意:在延迟一秒后,第一个“延迟”将出现。

The reason for this is in the way async methods are handled in C#, and the difference between Task.DelayThread.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 和 execution will proceed with the remaining commands, WriteLineReadLine. 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;
}

在这种情况下,输出将是以下内容:

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.

集中注意!

C#作为Web开发街区的新小孩进来。起初它被忽略了,那么它被嘲笑,那就被争夺了。现在它继续赢得世界各地开发商。这种增长的直接结果是使用C#代码的大量开发人员。

本文引用了每个专家C#开发人员应该掌握的主题。当您正在寻找一个伟大的C#开发人员时,请务必覆盖这些主题,并且您将越一步才能识别最佳最佳状态。

特色Toptal C#Publications

顶级C#开发人员需求量很高。

开始招聘