Rwing
V2EX  ›  C#

鉴于 C# 正沦为"小众"语言,想向大家介绍一下它,各位想看点什么?

By Rwing at 2021 年 6 月 29 日 · 12644 次点击

有感于 想学一门后端语言,哪个比较用的多,写起来比较爽

想向大家介绍一下这门"写的爽"的语言,又怕才疏学浅介绍不清楚。

不知道各位想看点什么?

不谈论生态就业等等问题,单纯说语言本身,有可能涉及到 .NET

第 1 条附言  ·  2021 年 6 月 29 日
我开头已经说了本帖不讨论生态就业等问题,单纯的向“想了解其他优秀语言的人”介绍一下 C#,烦请后来者不要再讨论生态就业等问题了,让我们聚焦在语言本身
第 2 条附言  ·  2021 年 7 月 1 日
谢谢给出意见建议的各位朋友,我计划写个系列文章,来介绍一下 C#语言本身,也可能会涉及到.NET 的一部分。
我只是不希望优秀的东西被埋没,但是文章无意引起各语言的对比与争议,只要能让读者觉得“这一块有点意思”、“这个语法挺爽”这就足够了,也是我的初衷。
91 条回复  •  2021-08-09 14:53:39 +08:00
Cbdy
   1
Cbdy  
   2021 年 6 月 29 日 via Android
抛开语言本身,国内 C#的现状是:工资低、岗位少、社区不活跃

这样的情况下,还给人推荐 C#,是真爱了
lixingjun
   2
lixingjun  
   2021 年 6 月 29 日
即便是开发桌面应用,也都直接 web 化了,C#前景堪忧
smilenceX
   3
smilenceX  
   2021 年 6 月 29 日
看到 2 楼,我觉得,楼主不妨介绍一下 C#桌面程序 相对于 web 化的桌面应用的优势
icyalala
   4
icyalala  
   2021 年 6 月 29 日
没关系,还有 Unity 呢~
heyhumor
   5
heyhumor  
   2021 年 6 月 29 日
简洁,优美
smilenceX
   6
smilenceX  
   2021 年 6 月 29 日
呃 ,楼主说的是语言本身,3 楼说的主题更偏 .net ,忽略 3 楼吧
Rwing
   7
Rwing  
OP
   2021 年 6 月 29 日
我开头已经说了本帖不讨论生态就业等问题,单纯的向“想了解其他优秀语言的人”介绍一下 C#,烦请后来者不要再讨论生态就业等问题了,让我们聚焦在语言本身
tabris17
   8
tabris17  
   2021 年 6 月 29 日
社区不活跃,三方包太少了
tabris17
   9
tabris17  
   2021 年 6 月 29 日
语言是个好语言,就是没啥用
imshawer
   10
imshawer  
   2021 年 6 月 29 日   ❤️ 3
C#,丝般顺滑,行云流水。

.NET ,连环境都不用装,self-contained 直接就可以欢快的跑在 Linux 上。

甲方说,.NET ? 还是用 JAVA 吧。
dxxzst
   11
dxxzst  
   2021 年 6 月 29 日
放到十年前,还可以
Cbdy
   12
Cbdy  
   2021 年 6 月 29 日 via Android
@Cbdy 打完一般就发出去了,就语言语法本身,现在各大语言其实都在同质化,区别越来越小了。

比如 TC39 天天琢磨怎么给 JavaScript 加特性,一年一个出个新版本,不够用还可以自己写插件; Java 再过两个月就版本 17 了,又有新特性,Loom,Valhalla 估计也快了(

很多人拿 Java 和 C#、Go 比,在我看来人才是最重要的因素,人多,社区活跃,剩下的不足可以慢慢改进嘛,这就是开源的魔法。

Go 的协程很棒,Java 对标弄了个 Loom ; Go 支持 AOT 成 Native Image,GraalVM 也对标弄个 AOT 编译器; C#是语法糖的先锋,但是加糖容易,减糖难,而 Java 也在加糖、但是更加保守(慎重),比如模式识别、Record 等

所以比起现有的语法、生态,一个语言的社区才是最重要的
wanguorui123
   13
wanguorui123  
   2021 年 6 月 29 日 via iPhone
自己用还是可以的
Cbdy
   14
Cbdy  
   2021 年 6 月 29 日 via Android
@Cbdy 模式识别 -> 模式匹配
vincent7245
   15
vincent7245  
   2021 年 6 月 29 日
语言是工具,只要钱给够让我用 python 写个电商系统都没问题
94
   16
94  
   2021 年 6 月 29 日
C#的优势场景?快 10 年前了解过现在已经连 C#能干嘛都记不起来了
Rocketer
   17
Rocketer  
   2021 年 6 月 29 日 via iPhone   ❤️ 4
中国不是全部。眼光放远一点,学 C#赚老外的钱不香吗?
huangmingyou
   18
huangmingyou  
   2021 年 6 月 29 日   ❤️ 3
java 的内存消耗,真的没人在乎吗,特别是微服务的场景下。白白浪费大堆内存。
yeqiu
   19
yeqiu  
   2021 年 6 月 29 日
想看 c#中常用的异步方案,或者不同语言的异步处理方案。最好能深入到 cpu 内存交换和任务调度方面的
感觉 await 是一个很差劲的异步方案,难以理解也不易使用。
love
   20
love  
   2021 年 6 月 29 日   ❤️ 1
Kotlin - 更好的 C#
zhuangzhuang1988
   21
zhuangzhuang1988  
   2021 年 6 月 29 日
命...
yolee599
   22
yolee599  
   2021 年 6 月 29 日
感觉 C# 在桌面应用上更加发力还是挺不错的。
unco020511
   23
unco020511  
   2021 年 6 月 29 日
java 也没好到哪去,上古语言
Rwing
   24
Rwing  
OP
   2021 年 6 月 29 日
@yeqiu 不好意思恕我才疏学浅,没有很深入的了解 Goroutines,这里有一篇文章对比 C#与 go https://zhuanlan.zhihu.com/p/279164405
我相信两种模式是各有利弊的。
至于 async/await 是否足够优秀,我个人觉得 async/await 对于初学者来说确实有些难理解,不过 async/await 应该也没那么糟,不然 python/js/rust/c++也不会竞相模仿吧
alexkkaa
   25
alexkkaa  
   2021 年 6 月 29 日 via Android
C#表面是很好。但是.net 平台却不那么好, 就本身来说很多标准库实现都有问题, 比如 cookie 的实现还挺留在很久前
fl2d
   26
fl2d  
   2021 年 6 月 29 日
等 VR/AR 起来了,c 井还能再闹一阵子?
kop1989
   27
kop1989  
   2021 年 6 月 29 日   ❤️ 2
以现在这个时间点( 2021 )而言,语言之间几乎没有绝对的优劣势可言。

比如你说 C#有什么绝对突出的优势么,并没有。优势在于原生支持.net 库
Java 语言本身有什么绝对优势么?也没有。优势都在那些框架上。

这就像是你讨论:英语、法语、德语、意大利语在语言本身上哪个优秀?

所以抛弃既有生态和行业内既有的开发流程来探讨语言本身,基本没有意义。
Jooooooooo
   28
Jooooooooo  
   2021 年 6 月 29 日
不如去学 rust.

还有 java 最新版本(16) 里的 gc 很值得一学, 也可以看看. stw 时间可以控制在 10ms 以内.
dinfeo
   29
dinfeo  
   2021 年 6 月 29 日
坐标工业领域
作为一个 从 delphi C# 到 现在 java Node.js 混用的
之前的很长一段时间,工厂的 IPC 都是装 Windows 系统的,而且 OPC 、modbus 等工业协议,C#都有较好的现成的包可以用,甚至一些机器的 HMI 都是跑着 windows 。。。
工厂里的环境,一般是与外网隔绝的,系统常年不更新,所以很大一部分工业软件都是基于 C#的 winform 程序。
但随着近几年 IOT 的兴起,各种 Linux 的 IOT 设备慢慢被工业领域接受,如传感器,gateway,智能型控制器。
所以,近几年 java 和 node.js 在工业领域又流行起来。

C#觉得还是 winform 和 Unity3D 比较适合。无论在 IOT 和 Web 的开发上,C#都显得力不从心,虽然有.net core 的跨平台,但是太晚了,在非 windows 的环境.net core 的稳定性和运维都是个风险。就和 windows phone 一样,不是不好,是出来太晚,导致没有了生态,最终失败。。。
Rwing
   30
Rwing  
OP
   2021 年 6 月 29 日   ❤️ 1
@kop1989 不敢苟同,是没有绝对的优劣势,但是有相对的优劣势,某个语言可以"写的爽一点点"我就感觉很开心了。
本贴也不是一个比较贴,只是向有心了解的人介绍一下,这没有意义吗?如果说没有意义,那我觉得“您点进来花了大段时间打字点评没意义”这事其实更没意义
yejinmo
   31
yejinmo  
   2021 年 6 月 29 日
同工控领域

服务端及 PC 客户端均由 C#开发,服务端正在迁移 .Net 5,PC 客户端用到了 WinForm 还停留在 .Net Framework 4.6.1

开发丝般顺滑
yejinmo
   32
yejinmo  
   2021 年 6 月 29 日   ❤️ 1
C#也绝对不是小众语言,只是相对国内这批 Java 大军小众了些
国外接 C#的外包爽到起飞,钱多工作量少,工作量指的是实现相同功能,C#代码要比 Java 少些一大堆
kop1989
   33
kop1989  
   2021 年 6 月 29 日
@Rwing #30 关键就在此,即便是“相对优劣”,也是需要场景的,“爽”也是要场景的。
而场景往往就诞生于行业既定的开发流程和既定生态下。

比如你要用微服务,你一定不会因为 c#的语法糖更甜、LINQ 更好用就放弃 java 转用 C#。
反之,你要开发 windows 客户端,你一定不会因为 Java 更原教旨主义的面向对象就选择 Java Swing 。
charlie21
   34
charlie21  
   2021 年 6 月 29 日
SDK 和 编辑器 和 IDE 直接介绍跨平台的 .NET Core 和 vscode 和 JetBrains Rider
不支持跨平台的用品请不要介绍 谢谢,唯有如此才能挽救 C# 形象
yejinmo
   35
yejinmo  
   2021 年 6 月 29 日
附一篇文档,对比分析写的很详细,适合熟悉 go 的开发人员看看

[翻译]Go 与 C#对比 第三篇:编译、运行时、类型系统、模块和其它的一切

https://www.cnblogs.com/InCerry/p/go-vs-csharp-part-3-compiler-runtime-type-system-modules-and-everything-else.html
ligiggy
   36
ligiggy  
   2021 年 6 月 29 日   ❤️ 1
我觉得 C#的多线程、异步操作,官方提供的 Socket API,SerialPort API,XML API 等可以用无可比拟来形容,提示文档也是其他语言无可比拟的。而这些特点,几乎就是传统制造业所需要的,短时间内就开发一套可以用上的、且稳定的客户端软件。
Jirajine
   37
Jirajine  
   2021 年 6 月 29 日 via Android
C#是 Java 那个时代的语言了,虽然各种语法糖特性加的多,放到现在也算不上“写的爽”。
dotnet 平台上倒是 ml 系的 F#写起来很爽,可惜一直不被重视,不温不火。
zhuangzhuang1988
   38
zhuangzhuang1988  
   2021 年 6 月 29 日
@ligiggy 还有原生的标准异步 cancel progress 支持, 别的语言都没有的。
JamesMackerel
   39
JamesMackerel  
   2021 年 6 月 29 日
@yeqiu

我倒是认为 async/await 语法糖是个非常优雅的解决方案,毕竟如果没有了它又一定要写 eventloop,似乎就要回到被“回调地狱”支配的时代。这个语法糖把这种难以理解的非线性的编程模式变成了非常优雅易懂的线性的编程模式,所以我觉得它是优雅的。
msg7086
   40
msg7086  
   2021 年 6 月 29 日   ❤️ 1
@huangmingyou 在乎内存的人为什么要选型 Java ?
都选了 Java 了还在乎那点内存干什么。
我司跑 Java,开发测试虚拟机给 24G 内存,实体机估计要配 1T 以上内存。
yazinnnn
   41
yazinnnn  
   2021 年 6 月 29 日
F#之于 C#有没有机会成为类似于 scala 之于 java 那种地位?
wellsc
   42
wellsc  
   2021 年 6 月 29 日
.netcore 能像 golang 那样交叉编译的话还是挺强的
yuyu2140
   43
yuyu2140  
   2021 年 6 月 29 日
Android 开发,写 Java 和 Kotlin,最近一年陆陆续续的负责后端的一些开发,接触到了 C# ,反正写起来比 Java 舒服多了,Kotlin 嘛 感觉就是 C# 的马甲,简直就是熟悉的味道。或者换句话说,这几年巨头门主推的语言都比较接近。
agoodob
   44
agoodob  
   2021 年 6 月 29 日
如果要制作 Windows 平台上的原生桌面程序,是使用 C# 吗?
能否总体介绍一下制作 Win 原生桌面程序的有哪几种方法?一些关键字和他们的概念介绍,并给出你个人对这些技术的评价和对比。
jjwjiang
   45
jjwjiang  
   2021 年 6 月 29 日   ❤️ 2
生态差是公认的,只能说.net core 在慢慢让局势好转

但是说语言写起来差不多就搞笑了,但凡写过一行 c#的 lambda 和 java 的 stream 也没法说出这种话
xz410236056
   46
xz410236056  
   2021 年 6 月 29 日
c#我现在唯一能想到的用处就是 unity 了
EKkoGG
   47
EKkoGG  
   2021 年 6 月 29 日
已启用几个 .net 5 后端应用了,暂时感觉良好
x940727
   48
x940727  
   2021 年 6 月 29 日
只谈语言不谈生态就是耍流氓,如果只谈语言 C++是无敌的,什么特性都有,你想怎么玩就怎么玩。
qW7bo2FbzbC0
   49
qW7bo2FbzbC0  
   2021 年 6 月 29 日
@wellsc #42 已经可以了,只是对 linux 3 以下内核,和小众处理器架构不友好
wellsc
   50
wellsc  
   2021 年 6 月 29 日
@hjahgdthab750 只是有,但是和 golang 还是差点火候,java 还有 graalvm 呢
masterDu
   51
masterDu  
   2021 年 6 月 29 日
@jjwjiang 能简单说一下这个是什么情况吗?“c#的 lambda 和 java 的 stream”;谢谢
slowly
   52
slowly  
   2021 年 6 月 29 日
@dinfeo 你工作内容是使用 c#在工业领域吗?感觉工业生产车间这种就是桌面端的,客户不也管你使用什么实现,用起来稳定就行。看到工厂里面的 XP 系统上面跑的 MFC,照样跑到飞起。
secondwtq
   53
secondwtq  
   2021 年 6 月 29 日 via iPhone   ❤️ 2
> 不谈论生态就业等等问题,单纯说语言本身
楼主还没看出来本站大多数人对所谓”语言本身”不感兴趣么?(甚至根本不明白何为”语言本身”)
nullcoder
   54
nullcoder  
   2021 年 6 月 29 日
跟着盖茨混的,到后面基本都得到了 bill
看看 ibm,挪鸡鸭,个体开发者就更别说了
出发他步乔帮主后尘
mikasyou
   55
mikasyou  
   2021 年 6 月 29 日
小人菜鸡,c# 和 java 相比的话,我能想到是从**替代反射**方面考虑,c#有表达式树,java 有 apt 插件
例如从(只是功能对标的)
c#的`AutoMapper`库 和 java 的`MapStrcut`库,还有 c#的 graphql 和 java 的 `grahql-java-tools`
它们就分别靠表达式树 、apt 来高性能实现,这就能看出两个语言的一些区别和特点了
ReferenceE
   56
ReferenceE  
   2021 年 6 月 29 日 via Android
泻药,C#粉,生态太差没办法
kett
   57
kett  
   2021 年 6 月 29 日
楼主有推荐的入门书吗?感觉讲 C#的书比 Java 少太多太多了。
pythonee
   58
pythonee  
   2021 年 6 月 29 日
之前用 JAVA 、Python 较多
中间玩票性质的看过 Scheme

很好奇 C#有什么好玩的呢,据说 LINQ 是杀手锏呀,期待
levon
   59
levon  
   2021 年 6 月 29 日
LINQ to Entity,访问数据库,能完全不写 sql 吗
billlee
   60
billlee  
   2021 年 6 月 29 日
就语言本身来说,我比较关注类型系统,内存管理,ffi, 元编程这几个方面
loryyang
   61
loryyang  
   2021 年 6 月 29 日
我之前接触过一段时间,这个语言很好,他的问题本身不在于语言自身
oneforallsoft
   62
oneforallsoft  
   2021 年 6 月 29 日
@yejinmo
你接过国外 C#外包?
towser
   63
towser  
   2021 年 6 月 29 日
C# 的书够看了,倒是.NET 的 IL 相关以及 WPF 缺乏特别好的教程。
BBCCBB
   64
BBCCBB  
   2021 年 6 月 29 日
@Cbdy loom 遥遥无期.
yccalculus
   65
yccalculus  
   2021 年 6 月 29 日
@levon c# 有些 orm 可以一点 sql 都不写,包括各种 join
noroot
   66
noroot  
   2021 年 6 月 29 日
C# 国内书籍和教程相对( Java 、Javascript 、Python 、Go ...)较少,不便于小白入门。
相对于新进的 Go 来说又过于复杂,面对国内的情况(其他转码农,小白基础不行等)很难竞争。
Fule
   67
Fule  
   2021 年 6 月 29 日   ❤️ 1
楼主看看大部分回复的画风,都是老生常谈了~只要自己喜欢,大众、小众无所谓。身边有对 C#感兴趣的人,就一起研究一下。要么就整个群什么的,有个简单的进入门槛,或者其实找不错的论坛之类的,对于 C#相关的问题,直接有针对的回复。这种公开的帖子就会有一些那种原本就对 C#无感乃至厌恶的人进来以“过来人身份”丢一句类似前几楼那样的话,相当扫兴。

别的不说,俺在教俺闺女 C#,先用这儿的文档: https://docs.microsoft.com/zh-cn/learn/paths/build-dotnet-applications-csharp/, 她自己照着研究照着做。她学校有在教 Python,她自己说觉得更喜欢 C#的变量声明方式。
initd
   68
initd  
   2021 年 6 月 29 日
微软公司的屁股倾向太严重了,它从来不惮于违反用户的意愿去达成某种目的。
呵呵呵呵
agagega
   69
agagega  
   2021 年 6 月 30 日 via iPhone
Swift 、C#、Kotlin 来自不同的三家公司,但他们有时候又有些相似,都是糖中糖
lonenol
   70
lonenol  
   2021 年 6 月 30 日
如果志在介绍 "写的爽" 这一点,那就介绍 C#的各种语法糖...然后还要和 Java 对比一下。。你们看,Java 要这样这样这样这样才能实现,我 C#一行代码就行了这样。。
ligiggy
   71
ligiggy  
   2021 年 6 月 30 日
@levon 可以的
hsc0der
   72
hsc0der  
   2021 年 6 月 30 日
@yeqiu await async 设计的优点之一就是方便理解
colincat
   73
colincat  
   2021 年 6 月 30 日
Unity3D 不就是用 C#吗,王者荣耀里面应该有 C#代码及 lua 的混合代码
encro
   74
encro  
   2021 年 6 月 30 日
介绍.net 5.0,WinUI 3,然后是 nuget 里的优秀库和垃圾。
tsungkang
   75
tsungkang  
   2021 年 6 月 30 日
10 年.net 老开发在此,从.net framework2.0 一路用到.net 5,.net core 也是从 alpha 一路用到现在,自从.net 可以跑在 linux 上面以后我仿佛打开了新世界大门;在一次次的.net 版本更新中我也能切实感受到微软在这方面的努力以及改变,所以我自己还是很喜欢.net 的;

从语言层面来说的话,C#最让我欲罢不能的就是 LINQ 跟 TAP(async/await),有时候要临时处理什么事了(比如从数据库里导点什么表格然后做点加工之类的),直接掏出 linqpad,一顿操作然后交差,看着他们投来赞赏的目光我感觉自己就是公司的 LINQ 之王;(跟那些一言不合掏出 python 的哥们是不是有点异曲同工?)

话又说回来了,在我眼里很多公司在用的 java8/jdk1.8 跟目前 Oracle 规划的 2 个 LTS 版本( 11/17 )比起来也有不小的差别…所以不管什么语言,在这大环境下面最终都要回归到实用主义上面来…
Shook
   76
Shook  
   2021 年 6 月 30 日
如何使用 c#开发 unity 游戏
pkoukk
   77
pkoukk  
   2021 年 6 月 30 日
c#在老外那可一点都不小众。
国内小众的原因很简单啊,当年学校教的少。第一波互联网浪潮的时候会的人少,java 占了先发优势,后续大家又产生了路径依赖...
xianxiaobo
   78
xianxiaobo  
   2021 年 6 月 30 日
如何用 c#开发游戏
hikarugo
   79
hikarugo  
   2021 年 6 月 30 日
可以语言本身的讨论真的一点意义都没有。。。工具箱里取业务所需即可,没要讨论锤子怎么样
Dragonphy
   80
Dragonphy  
   2021 年 6 月 30 日
微服务生态下,C#应该比 Java 好不少吧,仅仅是缺少生态?反正 Java 轮子多,但是现在微服务、云原生浪潮下太吃性能了。
naver1
   81
naver1  
   2021 年 6 月 30 日
真的特别喜欢 C#,感觉 Java 就是异端
pipilu
   82
pipilu  
   2021 年 6 月 30 日
@yejinmo 大佬哪里接外包啊
Lemeng
   83
Lemeng  
   2021 年 6 月 30 日
自己用用就好,任何东西的用户量都是驱利的,不讨论可以,但也是实实在在的现实问题
wangyzj
   84
wangyzj  
   2021 年 6 月 30 日
语言是否成功要天时地利人和
反正我不喜欢 java
臃肿啰嗦慢
dinfeo
   85
dinfeo  
   2021 年 6 月 30 日
@zhangrenjie 没错,以前也有很大一部分 C++ mfc 的,当时现在会这些的人很少了,所以,C#很好的弥补了这个空缺,拖拉界面方便,易上手,招人相对 C++ mfc 简单。
所以说,在制造业里,当时 C#还是挺有市场的。
sagaxu
   86
sagaxu  
   2021 年 6 月 30 日 via Android
来传统行业看看,C#不比 Java 用的少
Rocketer
   87
Rocketer  
   2021 年 6 月 30 日 via iPhone
@levon LINQ 的方便之处在于它不仅能代替 SQL,连 NoSQL 也可以。比如 MongoDB,直接 collection.AsQueryable(),后面就都一样了,各种数据库在 LINQ 面前都是一样用,甚至包括文件(可以直接查询 xml 文件的节点)
mmdsun
   88
mmdsun  
   2021 年 7 月 1 日 via Android
unity3D 游戏开发用得多啊
Rwing
   89
Rwing  
OP
   2021 年 7 月 1 日
谢谢给出意见建议的各位朋友,我计划写个系列文章,来介绍一下 C#语言本身,也可能会涉及到.NET 的一部分。
我只是不希望优秀的东西被埋没,但是文章无意引起各语言的对比与争议,只要能让读者觉得“这一块有点意思”、“这个语法挺爽”这就足够了,也是我的初衷。
jeeyong
   90
jeeyong  
   2021 年 8 月 6 日
@vincent7245 你咋瞧不起 python 呢? python 是世界上最好的语言.
peng0416
   91
peng0416  
   2021 年 8 月 9 日
@Rocketer 还是太难了点
© 2026 V2EX · 206ms · 3.9.8.5