Dmitry是一位拥有20多年创作经验的顶尖开发者 .NET web applications. He mostly deals with ASP.NET Core and Blazor (C#, .. NET Core)软件开发和体系结构设计. Dmitry曾9次获得微软MVP(开发者技术)奖,是一位有能力的社区领袖. 他还获得了计算机科学、构造地质学和建模的硕士学位. 客户称他为“编码机器”."
c#就像一个新来的孩子. At first it was ignored, then it was ridiculed, 然后它就被反对了, 但现在它继续赢得世界各地的开发者. 这种增长的直接结果是大量的开发人员正在使用c#. 本指南涵盖了每个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#开发人员之间的每次约定都以长达两周的试用期开始. 这意味着你有时间确认订婚是否成功. 如果你对结果完全满意, 我们会给你开时间单的,你愿意多久我们就多久. 如果您不完全满意,我们不会向您收费. From there, we can either part ways, 或者我们可以为您提供另一位可能更合适的专家,我们将与他开始第二轮谈判, no-risk trial.
Share
如何聘请优秀的c#开发人员
Remember the Y2K bug? 显然,由于全球计算机网络的严重破坏,世界本应结束. Just one year before that, 我们听说1999年将是世界末日,因为它的名字中有一个倒写的666. In such turbulent times, 当时很多人在地下室里堆食物, 希望世界末日不会找到他们, 有几个有远见的人还在发明一些很酷的东西. One of them is Anders Hejlsberg, 是谁召集了微软的开发团队,创造了Cool, 哪个是新的类c语言的第一个版本, 后来被命名为c#(发音为“C Sharp”).
历经14年和5个版本,c#已成为业界最流行的语言之一. Despite the fact that James Gosling and Bill Joy 认为c#只是对Java的模仿, 而其他一些批评者甚至称c#是一种无聊的重复,缺乏创新, c#现在在世界各地数以百万计的开发人员使用的所有其他平台旁边站得很高.
c#是一种包含强类型的多范式编程语言, as well as imperative, declarative, functional, generic, 面向对象(基于类), 以及面向组件的编程原则. 您可以使用它来构建任何类型的应用程序, whether it is a service, console, desktop, Web或甚至智能手机应用程序.
每种应用类型都需要在标准c#语法之上的一套特定的技能, 找到一个优秀的c#程序员, 无论是全职还是兼职, is not an easy task. 如果你正在寻找一个web开发人员,你应该期望在HTTP协议的技术专长, Web Forms, MVC框架和Razor视图引擎, 而其他一些应用程序将有自己的挑战.
静态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引入了查询和更新数据的标准模式,支持任何类型的数据存储.
或者,简单地说,LINQ允许对c#中的对象集合进行类似sql的查询.
问:假设你有一个班级 Developer defined like this:
class Developer
{
public string Name { get; set; }
public List Skills { get; set; }
}
编写代码,从数据库中提取所有具有“SQL”技能的开发人员 List developers.
你期望从一个理解LINQ的开发人员那里得到的答案是类似的:
在开发者中,Var results = from d.Skills.Contains("SQL") select d;
不习惯LINQ的开发人员可能会使用标准的迭代方法 for, foreach or while combined with if. Similar to this:
var results = new List();
Foreach(开发人员的变量)
{
if (d.Skills.Contains("SQL"))
results.Add(d);
}
创建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 方法只是实现了适当的计算.
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
异步对于潜在阻塞的活动是必不可少的, 例如当应用程序访问网络资源时. 对网络资源的访问有时很慢或延迟. 如果这样的活动阻塞了同步进程,则整个应用程序必须等待. 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 被称为异步方法.
这样做的原因是“等待”值被分配给 statement before the await command is called. By the time Console.WriteLine(statement); in SayAwaited is executed, the value of statement 已经被更新了 SayDelayed method.