C# way to explore https:https://cdn.v2ex.com/navatar/2387/337b/1005_normal.png?m=1579006175 https:https://cdn.v2ex.com/navatar/2387/337b/1005_large.png?m=1579006175 2025-10-05T06:25:00Z Copyright © 2010-2018, V2EX paddleocr 的 C#集成问题 tag:www.v2ex.com,2025-10-05:/t/1163402 2025-10-05T04:18:09Z 2025-10-05T06:25:00Z shdm520 member/shdm520 根据下面两个教程:

我去试了一下,结果一个要 paddleocr_sharp.dll ( GPU 推理加速要收费),一个要 ppocr.dll (教程里说:从官方 GitHub 仓库下载预编译的 Windows 版本(含 ppocr.dll ),但是 release 的包里没有这个 dll )

弄了一上午了,快放弃了,还不如 python

希望有懂这方面的来指导一下,小弟感恩不尽

]]> C#中异步相关的问题 tag:www.v2ex.com,2025-09-29:/t/1162642 2025-09-29T06:35:14Z 2025-09-29T08:29:34Z jmliubiao member/jmliubiao 我的理解是,如果不需要获取异步后的结果进行其他处理则可以不用加。如果不加 async 、await ,真到生产上会不会有什么问题?

示例代码:
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class TestController : ControllerBase
{
[HttpGet("get1")]
public Task<Student> Get1Async()
{
return new TsetService().Get1Async();
}
[HttpGet("get2")]
public async Task<Student> Get2Async()
{
return await new TsetService().Get2Async();

}
}


public class TsetService
{

public Task<Student> Get1Async()
{
// 模拟数据库查询
Task.Delay(100);
return Task.FromResult(new Student { Id = 1, Name = "张三" });
}

public async Task<Student> Get2Async()
{
// 模拟数据库查询
await Task.Delay(100);
return new Student { Id = 1, Name = "张三" };
}
}

public class Student
{
public int Id { get; set; }
public string Name { get; set; }
}
} ]]>
.NET 换新的异步编程模型了,性能很强 tag:www.v2ex.com,2025-09-17:/t/1160063 2025-09-17T17:44:01Z 2025-09-19T14:41:31Z hez2010 member/hez2010 .NET 现在正在把 async/await 从原来的编译器实现改成 runtime 直接支持新的 async 调用约定,带来了非常大的性能提升,不过代码的写法倒是没有改变,但底层改变很大。

具体介绍可以参考: https://zhuanlan.zhihu.com/p/1951804339745195151

]]>
想念 C# tag:www.v2ex.com,2025-08-28:/t/1155537 2025-08-28T06:51:28Z 2025-08-28T08:06:33Z ejin member/ejin 忍不住想起它

想起它骨子里的优雅、现代,却又务实

我欣赏,并且依赖

它有清晰的层次感,每一个类型都有其职责,每一次异步都流转自如

它不给我繁琐,却给我前所未有的效率

它的世界里没有边界的束缚,没有平台的隔阂,只有封装下的无限可能

它能在不失真的前提下演进出精彩,托管如云,却稳如泰山

C# ,我想你了

]]>
200 块有偿求助 C#高速读取串口,导致软件闪退的问题。 tag:www.v2ex.com,2025-06-12:/t/1138099 2025-06-12T03:14:44Z 2025-06-15T17:16:29Z hulalahei member/hulalahei 开发框架是 Avaloina 11.2.2 + .NET 8.0 ,包是 System.IO.Ports 9.0.0-preview

问题描述:电脑通过串口读取硬件的数据,设备会连续不断返回数据,如果设备每秒返回 50 次数据,软件就不会闪退。如果设备返回数据的速度超过 200 次每秒,就有一定的概率会出现闪退的问题,闪退的频率大概就是 1-2 小时出现一次,偶尔会 10 分钟内连续出现两次。我换过不同的设备,只要是读取速度过快,都会出现相同的问题。

读取数据的代码片段是:

_serialPort = new SerialPort(); _serialPort.Parity = Parity.None; _serialPort.DataBits = 8; _serialPort.StopBits = StopBits.One; _serialPort.RtsEnable = true; _serialPort.Handshake = Handshake.None; _serialPort.ReadTimeout = 5; _serialPort.WriteTimeout = 5; _serialPort.ReceivedBytesThreshold = 1; _serialPort.DataReceived += OnSerialDataReceived; private async void OnSerialDataReceived(object sender, SerialDataReceivedEventArgs e){ var buffer = new byte[512]; // 最多读 10 字节 int numRead = await _serialPort.BaseStream.ReadAsync(buffer, 0, buffer.Length); } 

闪退的时候报错信息:

[06/02/2025 01:20:02] InvalidOperationException: Argument_NativeOverlappedAlreadyFree at System.Threading.ThreadPoolBoundHandle.OnNativeIOCompleted(IntPtr instance, IntPtr context, IntPtr overlappedPtr, UInt32 ioResult, UIntPtr numberOfBytesTransferred, IntPtr ioPtr) 

第一个帮助我解决问题的小伙伴,200 红包感谢。

]]>
老师,我太想进步了——关于 C#学习 tag:www.v2ex.com,2025-06-03:/t/1136103 2025-06-03T09:27:57Z 2025-06-03T12:53:42Z bunny189 member/bunny189 能不能请教下大佬们,C#比较好的学习资料
我这边主要想做 asp.net core

谢谢! ]]>
visual studio 2022 代码提示消失 tag:www.v2ex.com,2025-04-12:/t/1124958 2025-04-12T07:10:35Z 2025-04-15T13:57:19Z xt666 member/xt666 Cursor 生成的代码有个大坑,排查了一晚上才找出原因 tag:www.v2ex.com,2025-01-18:/t/1106062 2025-01-18T05:59:55Z 2025-01-18T13:45:38Z drymonfidelia member/drymonfidelia 我让它判断输入里只能有字母和数字,其它输入要拦截

结果上生产环境后经常出现奇怪的输入内容没拦截掉

"测试".All(x=>char.IsLetterOrDigit(x)) 

最后发现原因出在 Cursor 生成的这行代码输入中文结果居然是 ture

混在一堆代码里面完全想不到这里能出问题,我手写的话根本不知道 C#有这个函数就不会出问题

C#这起得啥名太具迷惑性了,和 Python 的 rstrip 一样,rstrip 我是没用错过,但看过不止一个开源项目里面用错了

]]>
C# 有哪些显著的缺点? tag:www.v2ex.com,2025-01-05:/t/1102753 2025-01-05T15:51:22Z 2025-02-13T13:53:30Z w568w member/w568w 之前久仰 C# 大名,但一直没实际接触过,一是感觉微软的东西都不靠谱,二是觉得这语言只有游戏产业和 ASP.NET 服务器在用,三是不知道从哪里留下了「 C# 运行性能特别差」的印象。

今天在 Windows 上写了个小数据处理脚本,出于好奇去安装了一下 .NET 9 ,用 GPT 把 Python 转成了 C# 去跑,发现这东西跑起来飞快,比 Python 快了不止七八倍,CPU 也吃满了。

继而去查了一下 Debian 的 The Computer Language Benchmarks Game 。不看不知道,好家伙,现在 C# aot 都能在 CLBG 排到 Go 头上去了:

Language elapsed secs / fastest
Intel C 1.1
C 1.3
C# aot 1.5
Java 1.5
Go 1.6

虽然性能测试和 Java 差不多,但内存占用要少 50%~70%。试了一下 AOT 编译,编译出来就一个 4~5MB 可执行文件,体积很小也无依赖,额外开销基本和 Rust 、C++ 那些原生语言差不多无感。

但这可是带 GC 的「重型」语言啊,微软这几年的优化确实厉害。

所以感觉这语言挺有意思,准备最近多花时间当兴趣学习一下,但还是对微软的东西不是很放心。问问各位 C# 开发:C# 有什么特别明显缺点或者写起来卡手的地方吗? 提前谢谢大家。

]]>
有没有 Sematic Kernel 可以落地的应用推荐? tag:www.v2ex.com,2024-12-13:/t/1097321 2024-12-13T07:49:09Z 2025-01-05T10:12:44Z Shawn5 member/Shawn5 各位大佬,有没有 Sematic Kernel 可以落地,可以应用的项目推荐,不用太大,小项目即可,能够赚点私房钱

]]>
请教下 C#有没有办法用装饰器全局监控方法执行时间 tag:www.v2ex.com,2024-12-13:/t/1097239 2024-12-13T03:32:04Z 2024-12-13T05:30:10Z irisdev member/irisdev
1.写个方法传个委托,然后在委托执行前后执行一下 StopWatch ,把业务代码都传到这个委托里。但是这么做很不方便,貌似意义不大

2..net 有个开源库 MethodTime.Fody ,加上一个[Time]特性就可以实现我想要的效果,但是内网环境,而且我不是 Leader ,不敢随便引入其他包

请教下各位大佬在.net framework 里面有没有遇到过类似的需求,有没有什么比较好的实现方案,谢谢回复 ]]>
想用 c#的 mvc 实现一个功能. tag:www.v2ex.com,2024-11-22:/t/1091681 2024-11-22T01:14:37Z 2024-11-22T09:01:42Z wangybsyuct member/wangybsyuct 事情是这样的,服务器比较老 windows server2003 ,上面运行的 php 版本有漏洞,但是 php 无法升级,操作系统更换也非常困难。 想使用 c#的 MVC 实现里面的 php 程序的功能,服务器是提供接口,接口形式不能变。 接口类似于 http://webserver.com/abc/def.php?code=abc123321 我想用 c#的 MVC 实现这个接口,请教大家 mvc 的程序和配置该如何实现? mvc 的程序一些,配置不是很熟。 感谢感谢

]]>
Unity 双击 C#脚本默认打开 Visual Studio 没有代码提示如何解决? tag:www.v2ex.com,2024-11-01:/t/1085566 2024-11-01T01:19:23Z 2024-11-01T10:18:03Z coolair member/coolair 请问 c#有没有一些能规范学习的生产管理系统开源项目? tag:www.v2ex.com,2024-10-21:/t/1082107 2024-10-21T02:58:13Z 2024-10-27T11:09:44Z newma member/newma 小弟 c++转 c#,都说怎么系统学都要实战,想直接借助一个完整的生产管理系统的开源项目来上手(比较贴合工作)。希望代码和框架是比较规范的,前后端都有,扩展性强,插件框架。 收费的项目也可以,之前在咸鱼买过一个不知道多少手的类似的系统,但是版本有点久远了。

]]>
C#串口通信问题 求教 tag:www.v2ex.com,2024-09-07:/t/1070931 2024-09-07T07:09:31Z 2024-09-23T21:04:51Z Lynntox member/Lynntox 我使用 labview 写的是没有问题的,通过串口助手发送产品也有反应

但是在使用 C#就没办法正常通讯

首先 我确认了线是没问题的,串口属性是没问题的 9600-8-n-1

byte[] command = new byte[] { 0xAA, 0x55, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xEE };

// 发送数据 serialPort.Write(command, 0, command.Length);

就很奇怪

]]>
C# 怎么同时交叉编译 windows Linux mac ?跟 go 一样 tag:www.v2ex.com,2024-08-14:/t/1065009 2024-08-14T10:37:36Z 2024-08-20T00:21:11Z yuaotian member/yuaotian 好奇,怎么同时编译三个系统的执行文件? go 就可以,C#在发布里面没找到,搜索引擎资料也很少,跟着编译也不行。

开发:vs2022 、Rider

]]>
ClosedXML 如何对一列数据设置高亮重复项?(高亮重复项是 Excel 的一种功能;不能手动给重复单元格设置背景颜色,这样的话用户删除重复项后不会自动去除高亮) tag:www.v2ex.com,2024-08-13:/t/1064736 2024-08-13T13:54:27Z 2024-08-13T17:35:21Z drymonfidelia member/drymonfidelia 求推荐软件开发练习项目的教学视频或书籍 tag:www.v2ex.com,2024-07-01:/t/1053917 2024-07-01T05:40:52Z 2024-06-30T13:39:52Z huzhikuizainali member/huzhikuizainali pkcIXjg.png

]]>
如何在 visual studio 2022 中新建单元测试项目时默认使用最新版本? tag:www.v2ex.com,2024-06-21:/t/1051500 2024-06-21T07:09:25Z 2024-06-20T15:08:25Z huzhikuizainali member/huzhikuizainali 我通过 visual studio 2022 添加一个 Nunit 项目。添加以后我发现其中依赖的 Nunit 版本是 3.14.0 。但是 Nunit 目前最新版是 4.1.0 。我如何让以后所有的新建 Nunit 项目默认就使用 4.1.0 版。而不使用 3.14.0 版?

以上只是一个例子。其实用 visual studio 新建任何有依赖项的项目时都会面临这个问题。

GPT 让我用 nuget 对每个项目指定相应版本的包。但是当项目很多的时候会有大量重复的工作。

]]>
C#有像 C++的 libevent 同样定位的高性能跨平台网络库吗? tag:www.v2ex.com,2024-05-18:/t/1041885 2024-05-18T11:18:28Z 2024-05-21T15:29:37Z xmagicer member/xmagicer 求助,如何正確劫持系統 DLL 調用 tag:www.v2ex.com,2024-05-10:/t/1039458 2024-05-10T06:04:37Z 2024-05-16T10:55:53Z Abyss0729 member/Abyss0729 背景:公司電腦中有個使用 C#編寫的電腦監控軟件,其中有一個功能就是檢查正在運行的進程,並獲取所有進程的 EXE 的資源信息(產品名稱,公司等等),依此來確定是否是違禁軟件。 經過反編譯得知它使用的是 System.Diagnostics.FileVersionInfo.GetVersionInfo 來獲取的信息。 請問如何讓這個功能無效。 我嘗試修改了 System.Diagnostics.FileVersionInfo.dll 並放到 EXE 文件目錄內但是沒有效果。 自己沒學過 C#,請各位賜教!

]]>
C#生态里有啥简单一点的容易上手的开源后台管理系统吗? tag:www.v2ex.com,2023-12-26:/t/1003509 2023-12-26T06:32:46Z 2024-01-01T08:06:37Z 289396212 member/289396212 .NET6 HttpClient 无反应也不超时? tag:www.v2ex.com,2023-12-25:/t/1003381 2023-12-25T15:20:33Z 2023-12-25T17:17:33Z xiamo23 member/xiamo23 这个代码哪里有问题吗?请求后一直无反应,也不会报超时,但是抓包软件已经看到正常请求和返回了?是不是 HOST 和请求 URI 不一直的问题》?? var handler = new HttpClientHandler { AllowAutoRedirect = false, CookieCOntainer= new CookieContainer(), UseCookies = true, UseProxy = true, Proxy = new WebProxy("http://127.0.0.1:8888", false), ServerCertificateCustomValidatiOnCallback= (message, cert, chain, errors) => { return true; }, MaxAutomaticRedirectiOns= 1,

}; using HttpClient webclient = new(handler); webclient.DefaultRequestVersion = HttpVersion.Version20; webclient.Timeout = TimeSpan.FromSeconds(10);

webclient.DefaultRequestHeaders.Host = urls[1]; webclient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", ua(mobile)); webclient.DefaultRequestHeaders.TryAddWithoutValidation("x-requested-with", "com.ct.client"); webclient.DefaultRequestHeaders.TryAddWithoutValidation("upgrade-insecure-requests", "1"); HttpResponseMessage respOnse= await webclient.GetAsync(urls[0]); 然后就一直没反应了

]]>
关于.NET6 httpclient 用 IPV6 还是 IPV4 的疑问 tag:www.v2ex.com,2023-12-24:/t/1003023 2023-12-24T10:31:53Z 2023-12-24T11:42:45Z xiamo23 member/xiamo23 各位?假如我需要只通过 IPV4 访问需要怎么实现? 由于个别原因,有些服务需要通过 IPV6 访问,而有些又只能 IPV4 协议不对就会报错,httpclient 需要怎么设置?

]]>
关于 C#调用 DLL 的疑惑 tag:www.v2ex.com,2023-12-23:/t/1002885 2023-12-23T09:56:13Z 2023-12-23T11:58:35Z justdoitzZ member/justdoitzZ 手头有个文件格式转换的 DLL ,正常一个文件格式转换需要 0.4s

首先做了一个小程序,读取了目录下的 100 个需要转换的文件的路径信息,然后 100 个依次进行转换,耗时 0.4* 100 = 40s

然后我把这个小程序复制了一个,成了小程序 2.

小程序和小程序 2 可以同时双开,进行文件转换。速度也加快了。

但是当我尝试在一个程序里面使用 task 或者多线程调用 DLL 里面的文件转换函数的时候,就报错了。DLL 内置了加密狗权限查阅功能,此时就异常了。但是很奇怪的是,小程序 1 和小程序 2 可以同时运行,没有出现机密狗权限的问题。

困扰我好久的问题,有大佬可以解答疑惑吗?

]]>
C#程序员开发手机页面有什么适合的 UI 框架? tag:www.v2ex.com,2023-12-21:/t/1002476 2023-12-21T23:52:09Z 2024-02-25T03:46:53Z idragonet member/idragonet 在谈一个外快单,页面基本都是增删改查功能,都是手机页面.

]]>
求教大佬,用 C#如何操作 word 文档 tag:www.v2ex.com,2023-12-17:/t/1001110 2023-12-17T09:18:14Z 2023-12-31T16:56:24Z crazylinus member/crazylinus 如何配置环境变量才能让 dotnet 和 ipconfig 都可以工作? tag:www.v2ex.com,2023-12-08:/t/998864 2023-12-08T17:46:10Z 2023-12-08T01:45:10Z huzhikuizainali member/huzhikuizainali
但是再调试程序发现.NET 用不了。 发现 dotnet 命令不可用了。显然是因为环境变量改变了。再次查方法。将 path 路径,改为 dotnet 所在目录。问题解决了。但是 ipconfig 命令又不可用了(我知道 cd 到 windows→System32 目录下 ipconfig 命令还是可用的)。

这样感觉很不方便,请问有没有什么办法让.NET 和 ipconfig 命令同时可用? ]]>
C#的二维码摆渡解码遇到点问题 tag:www.v2ex.com,2023-11-26:/t/995271 2023-11-26T05:24:11Z 2023-11-26T06:06:19Z zhoufan47 member/zhoufan47 之前在网上找到个 python 写的二维码摆渡程序,识别率颇高,但是 python 的 UI 界面实在难画,自己对 python 也不是很熟悉。 最近用 C#重写了一份,可以实现一些特定功能,但是发现无论是 ZXing.net 还是 Zbar ,识别效率和成功率对比之前 python 用的 CV2 打开摄像头+pyzbar 识别二维码的组合差很多很多。 python 下我是采用固定 10ms 读取摄像头识别一次,单次 6 图,效率大约是 60/s 。 c#下我是采用绑定 timer 的形式,20ms 触发一次从摄像头获取 bitmap ,送进 decoder 解码,效率只有 1/S ,甚至经常识别不出。 各位大佬帮忙看看。 C#核心代码

 private void decodeCurrentFrame() 
 { if (graphics == null) { return; } //复制图像 this.graphics.CopyFromScreen(Screen.PrimaryScreen.Bounds.X, Screen.PrimaryScreen.Bounds.Y, 0, 0, new Size(width, height), CopyPixelOperation.SourceCopy); this.pictureBox1.Image = this.bitmapSrc; Stopwatch sw = new Stopwatch(); sw.Start(); Bitmap bitmap = (Bitmap)this.bitmapSrc.Clone(); //解码图片 Result[] results = reader.DecodeMultiple(bitmap); //读取识别出来的二维码 if (results != null) { foreach (Result result in results) { { Console.WriteLine("成功识别"); string cOntent= result.ToString(); if (content.Length <= 20) { return; } string prefix = content.Substring(0, 16); //获取文件前缀 string currentIndex = prefix.Substring(0, 8); //获取当前切片索引编号 string total = prefix.Substring(8); //获取总索引数 if (content.Contains("|")) { int prefixIndex = content.LastIndexOf("|"); int qrCurrentIndex = content.IndexOf("|"); currentIndex = content.Substring(0, qrCurrentIndex); string raw = content.Substring(prefixIndex + 1); cOntent= "0000000000000000" + raw; Console.WriteLine("旧版数据" + raw + "索引编号:" + currentIndex); } initResultMap(total); dealData(currentIndex, content.Substring(16)); checkResultMap(); } } } //统计数据 sw.Stop(); TimeSpan ts = sw.Elapsed; string costed = ts.TotalMilliseconds + "ms"; labelTickCost.Text = costed; } 

pyhon 核心代码

 def decodeDisplay(img): 
 global number barcodes = pyzbar.decode(img) for barcode in barcodes: barcodeData = barcode.data.decode() try: i = int(barcodeData[:8]) except ValueError: return img try: max = int(barcodeData[8:16]) except ValueError: return img ll = '' if not os.path.exists("temp/result" + str(i) + ".txt"): barcodeData = barcodeData[16:] with open("temp/result" + str(i) + ".txt", "w+") as f: f.write(barcodeData) number = number + 1 global sat if number == max: filecount = len(os.listdir('temp/result')) if number != filecount: number = filecount continue j = 1 while j <= number: with open("temp/result" + str(j) + ".txt", "r+") as f: txt = f.read() ll = ll + txt j = j + 1 global starttime ent = time.time() theLB.insert(END, "识别结束") theLB.see(END) with open("result/b64.txt", "w") as f: f.write(ll) temp = base64.b64decode(ll) with open("result/result.txt", "wb") as f: f.write(temp) if tkinter.messagebox.askyesno(title='识别成功', message='另存为'): old_path = tk.filedialog.askdirectory() shutil.copy("result/result.txt", old_path) theLB.insert(END, "识别成功") del_file() return img 
]]>
请教一个 sha256withecdsa 签名的问题 tag:www.v2ex.com,2023-11-24:/t/994968 2023-11-24T14:05:42Z 2023-11-24T14:56:16Z bsg1992 member/bsg1992 对接一个 java 系统 对方使用 sha256withecdsa 进行签名认证
我这里使用的是 dotnet framework 用了 BouncyCastle 这个库,但是生成的签名和 java 不一致
奈何网上的相关资料实在太少,求教一下万能的 v 友。

]]>
C#中有什么专有名词来定义 方法.方法 这种调用方式么? tag:www.v2ex.com,2023-11-19:/t/993166 2023-11-19T01:41:44Z 2023-11-18T09:40:44Z huzhikuizainali member/huzhikuizainali 对象名.方法
类名.方法
this.方法

请看下面这段代码,GetManager 是方法,IsValid 也是方法。这种当然 GetManager 会返回一个对象。最终导致 GetManager().IsValid(fileName) 事实上是 对象名.方法 的调用。但是 GetManager().IsValid(fileName)形式上还是 方法.方法 调用方式 。
我的问题是:方法.方法 的这种语法有什么“专有名词”来定义这种语法么?我想根据“专有名词”去查一下这个语法的使用限制等相关知识。

public class LogAnalyzerUsingFactoryMethod
{
public bool IsValidLogFileName(string fileName)
{
return GetManager().IsValid(fileName);
}
protected virtual IExtensionManager GetManager()
{
return new FileExtensionManager();
}
} ]]>
请问是否有 C# “官方”文档? tag:www.v2ex.com,2023-11-17:/t/992742 2023-11-17T04:00:25Z 2023-11-16T11:59:25Z huzhikuizainali member/huzhikuizainali 请问是否存在 C# “官方” 文档?我搜索到如下网址: https://learn.microsoft.com/zh-cn/dotnet/csharp/

感觉应该是官方文档。但是当我打开这个页面搜索结果页时,发现标题后面都会显示个人作者名。打开这些作者名以后发现他们并没有显著的微软官方职位。所以这个网址的内容是否属于 C#官方文档?

或者这只是微软版的 CSDN ?如果这是微软版的 CSDN ,那么真正的官方 C#文档地址在哪里呢?

]]>
关于 c#软件的逆向分析 tag:www.v2ex.com,2023-11-16:/t/992529 2023-11-16T10:03:10Z 2023-12-09T11:31:40Z shanyang88 member/shanyang88 逆向小白请教,为啥 c#写出来的有的 exe 程序,拖到 dnSpy 里可以看到源代码,而有的只能看到 PE (用 exeInfo 查了没有加壳,且可以用 exeInfo rip 出来一堆 dll 文件,而这些 dll 文件拖到 dnSpy 里是可以看到源码的)?

]]>
c#程序里的一个字符串参数,可以在生成的 exe 文件里搜索到吗? tag:www.v2ex.com,2023-11-14:/t/991855 2023-11-14T08:11:30Z 2023-11-14T08:33:19Z shanyang88 member/shanyang88 比如把这个 exe 文件拉到 ultra editor 里进行搜索。 具体地说,我想在生成的 exe 文件里搜索以下代码段中的 xxxxx: defaultStringHandler.BFormatted(Utils.Base64Decode("xxxxx")); 不知是否可以搜到?貌似不行?

]]>
C#新建项目后新建的各种文件的作用是什么? tag:www.v2ex.com,2023-11-04:/t/988705 2023-11-04T17:06:11Z 2023-11-04T01:05:11Z huzhikuizainali member/huzhikuizainali piQ37PU.png

见上图,用 vscode 调试 C# 为什么需要新建项目啊。项目下面有一堆文件。我用 matlab 学打个 hello word 。只需要一个代码文件就可以了。到了 C# 只新建一个.cs 文件什么也干不了。必须要 dotnet new console 新建项目

--------------------- 我发现一般讲代码的书或视频对此都是一代而过。只教怎么新建项目。不解释这些文件的作用和意义。我想先对这些文件的含义有个整体概念。因为我想在 vscode 里用 NUnit 跑个单元测试,体会一下书上的代码。没想到一上来就被这些项目文件给搞晕了。在 matlab 中只需要源代码,就可以跑起来,打断点,看结果。 关于这些文件,我想搞懂他们的作用,意义。对程序的编译运行有什么影响。背后的概念。有什么书籍或视频推荐么?科普向的。我自学!

]]>
请问这个访问控制声明是否有点多余? tag:www.v2ex.com,2023-11-02:/t/987688 2023-11-02T00:27:11Z 2023-11-01T08:26:11Z huzhikuizainali member/huzhikuizainali 请看下面的代码:

1 、这个类声明了一个属性 RPM ,显然希望 set 是 private ,我猜测这样声明会导致,get 是 public ?

2 、我知道 C++的 class 默认属性都是 private ,所以要显示声明 public ,C#也是如此?

3 、这个属性改成 int RPM{public get; private set; } 是不是可以达到同样的效果?

class Engine {

public int RPM{get; private set; }

}

]]>
请教, c#语言中,一个回调函数中使用 lock 部分执行较慢的代码,后续执行回调函数中 lock 操作执行顺序是不是不能保证先执行顺序 tag:www.v2ex.com,2023-10-21:/t/984081 2023-10-21T10:15:40Z 2023-10-21T14:25:23Z wxg4net member/wxg4net 既然已经继承了 BCL 中的 IComparable 接口,为什么还要自己写 CompareTo 方法的实现? tag:www.v2ex.com,2023-10-09:/t/980459 2023-10-09T21:54:14Z 2023-10-09T05:53:14Z huzhikuizainali member/huzhikuizainali 问题简述:书中说数组排序可以使用 Array.Sort 方法。但是如果你自己写了一个类 Myclass ,然后实例化一个 Myclass 类型的数组,就没有办法使用 sort 方法排序,因为 Array 类的 Sort 方法其实依赖千一个叫作 IComparable 的接口,它声明在 BCL 中,包含唯一的方法 CompareTo 。IComparable 接口的声明。注意,接口主体内包含 CompareTo 方法的声明,指定了它接受一个 object 类型的参数。尽管该方法具有名称、参数和返回类型,却没有实现。尽管在接口声明中没有为 CompareTo 方法提供实现,但 IComparable 接口的 NET 文档中描述 了该方法应该做的事情,你可以在创建实现该接口的类或结构时参考。文档中写道,在调用 CompareTo 方法时,它应该返回以下几个值之一:

1 、负数值如果当前对象小于参数对象;

2 、正数值如果当前对象大于参数对象;

3 、零如果两个对象在比较时相等。

Sort 使用的算法依赖于使用元素的 CompareTo 方法来决定两个元素的次序。int 类型实现了 IComparable, 但是 MyClass 没有,因此当 Sort 尝试调用 MyClass 不存在的 CompareTo 方法时会抛出异常。

---------太好了,只要我的 Myclass 继承了 IComparable 接口。就可以愉快的使用 sort 方法了吧?可是看到下面代码的时候我就沉默了。你看第三行,它怎么自己实现了 CompareTo 方法。难道我继承了 IComparable 接口不就是不想重复造轮子么?如果我自己重写 CompareTo ,那还不如不继承接口,自己直接手写 sort 方法不就完了? 难道 BCL 中就没有自己的 CompareTo ?如果没有自带的 CompareTo ,那么当你对标准数组排序调用 sort 方法时,sort 调用的是谁的 CompareTo 方法呢?

]]>
C#中类 类型的变量是通常所说的“对象么?”类的实例又是什么? tag:www.v2ex.com,2023-10-08:/t/980064 2023-10-08T20:48:34Z 2023-10-08T04:47:34Z huzhikuizainali member/huzhikuizainali 我面向对象的知识来自于 matlab ,比较简单。比如你定义了一个 class A ,那么你实例化一个对象就用 a=A(); 就可以了(假设类 A 的构造函数允许参数为空) 但是到了 C#,我发现比较复杂。请看下面的截图。给出了一个 “类 类型的变量” 概念。请问这个变量是通常说的“对象”么? 和“类的实例” 是一回事么? 因为这段文字中没有给出“类的实例”的明确定义( matlab 中对象和类的实例是一回事)

 截图 

之所以纠结这个问题,是因为下面的情况是在 matlab 面向对象程序中从未遇到的情况。mgr 到底是哪个类的对象呢? IExtensionManager 的? FileExtensionManage ? 虽然 FileExtensionManage 是 IExtensionManager 的子类 ,但是二者的字段 数量可能都不一样,最后 mgr 到底以谁为模板生成对象了呢?会不会出现鼠头鸭脖的矛盾呢?

 截图 

image

]]>
C#单元测试为什么不能过多使用 setup? tag:www.v2ex.com,2023-10-04:/t/978868 2023-10-04T05:51:09Z 2023-10-03T13:50:09Z huzhikuizainali member/huzhikuizainali 但是要注意,使用[Setup] 越多,测试代码可读性就越差。为了理解测试怎么得到实例,使用的对象是什么类型,人们不得不同时看文件里的两处代码。我告诉我的学生: “想象一下,代码的读者和你从未谋面也无法联系,在你离职两年之后才来读你的测试代码。你使得代码易读的每一个微小的努力,对他们都是极大的帮助。他们如果对你的代码有任何问题,周围都不会有人能够解答,所以你是他们唯一的希望。“如果读代码的人为了能理解你的测试而不得不在两段代码间来回地看,那可不是什么好主意。 pPOsKw6.png pPOsY6A.png pPOsa0P.png

请看上面这段单元测试的讲解,有两个问题:

1 、为什么“使用[Setup] 越多,测试代码可读性就越差。为了理解测试怎么得到实例,使用的对象是什么类型,人们不得不同时看文件里的两处代码。” 是因为由于 setup 的存在。所以每执行一次 test 标签的代码就会重新执行一次 m_analyzer = new LogAnalyzer(); 么? 但是这为什么会导致可读性变差。为什么会不得不同时看文件里的两处代码?而且书中说一段测试代码只能使用一个 setup 模块。所以何来“使用[Setup] 越多”的问题呢?

2 、为什么代码中最后一部分 public void TearDown () 说“不是必须的,在真实刹试中请不要使用”

]]>
C# 类中的这个构造函数能不能省略? tag:www.v2ex.com,2023-09-04:/t/970756 2023-09-04T05:56:25Z 2023-09-03T21:56:25Z d3js member/d3js // 像素转换信息 public class ConvertParam { // 输入的图像信息 public CImage InImage { get; set; } // 输出的图像信息 public CImage OutImage { get; set; } // 构造函数 public ConvertParam() { InImage = new CImage(); OutImage = new CImage(); } }

大佬们,上面 ConvertParam 类里面有两个 CImage 类型的属性 InImage 和 OutImage ,

下面的无参构造函数能不能省略呢?

如果不能的话,这个无参构造函数起什么必要的作用呢?

]]>
如何让 C# 窗体标签的语言默认是中文? tag:www.v2ex.com,2023-08-31:/t/969755 2023-08-31T06:18:10Z 2023-08-30T22:18:10Z d3js member/d3js https://i.imgur.com/jwOoC4R.png

网上下了一个海康相机 C# 的 Demo 。resx 文件有英文和中文的,点“开始执行”后得到的窗体标签的文字都是英文的,怎么让它默认显示英文呢?

本地计算机的地区和语言都是 [中国|中文]

]]>
C# 中 this 关键字在 Forms 类中使用的困惑 tag:www.v2ex.com,2023-08-21:/t/967135 2023-08-21T08:56:47Z 2023-08-21T00:56:47Z d3js member/d3js 官方对 this 的定义是:

this 关键字指代类的当前实例,还可用作扩展方法的第一个参数的修饰符。


问题:

1 、在 Forms 类中,使用 this 的话,窗体可以弹出

2 、在 Forms 类中,不使用 this ,自己去创建实例的话,窗体无法弹出

这是为啥呢?

https://i.imgur.com/9OtxuB3.png

https://i.imgur.com/84UT9Pb.png

]]>
2023 年了,值得入行 C#上位机吗? tag:www.v2ex.com,2023-08-04:/t/962492 2023-08-04T10:29:50Z 2023-11-17T00:38:44Z clevermis member/clevermis 二本计算机学生,java 找不到工作,选择了 C#上位机,过些日子入职(也是没办法,java 实在是找不到工作),想问一下 C#有前途吗?

现在该如何选择方向,学些什么以后会好一下(想做一下职业规划,毕竟如果被辞了,怕不知道干什么)

在网上找了好多,都是几年前的,而且对 C#也没有一些最新的评价

]]>
想学习辉芒微单片机开发,有大佬有学习资料和方式吗 tag:www.v2ex.com,2023-07-18:/t/957835 2023-07-18T16:01:43Z 2023-07-18T17:00:43Z buxiangqiaodaima member/buxiangqiaodaima 使用 C#的 HPSocket 的一个问题 tag:www.v2ex.com,2023-07-17:/t/957313 2023-07-17T02:33:18Z 2023-08-03T09:43:02Z exqibao member/exqibao 使用 hpSocket 写程序分服务端和客户端,服务端收到客户端的一个消息,服务端会响应多个信息给客户端,但客户端只收到部分信息,收到的包都是完整的。

服务端断点时,一个一个看客户端又能收到,关闭断点有低概率收到完整,大概率又收不完全。

其实循环里面只用发一次,调试故意发 5 次,至少收到 1 次,但没试过 5 次都全收到,除非卡着断点一个一个 Send 走。

 // 创建其他玩家 foreach (var model in DALManager.Instance.UserDal.GetAllUserModel()) { Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); Server.Send(connid, MessageType.Type_User, MessageType.User_Create_S, model.ID, model.UserInfo.ModelID, model.Point); } 

封装的 Send 方法;

 public static void Send(IntPtr connid, byte type, int command, params object[] content) { Message message = new Message(type, command, content); byte[] bytes = Message.ToBytes(message); server.Send(connid, bytes, bytes.Length); } 

hp-socket 的代码了;

 public bool Send(IntPtr connId, byte[] bytes, int length) { GCHandle gcHandle = GCHandle.Alloc((object) bytes, GCHandleType.Pinned); bool flag = HPSocket.Sdk.Server.HP_Server_Send(this.SenderPtr, connId, gcHandle.AddrOfPinnedObject(), length); this.SysErrorCode.Value = flag ? 0 : Sys.SYS_GetLastError(); gcHandle.Free(); return flag; } 

似乎连续总是会丢失后面的,有大佬知道问题在哪吗?

]]>
C# 有没有 Rust 和 Lisp 那样, if/match 能直接求值,像三目运算符一样的功能? tag:www.v2ex.com,2023-07-02:/t/953465 2023-07-02T11:25:53Z 2023-07-02T11:35:46Z LaTero member/LaTero 最近 Unity DOTS 进入 LTS 了,想试一试,平时 C#用得少,全凭 IDE 硬写,初始化常量遇到了这样的问题,如 Rust 中:

let a = if <slow operation A> { 1 } else if <slow operation B> { 2 } else { 3 }; 

(注:Rust 不带mut默认是常量)

没有这个功能的话,a 就得声明成 mutable ,然后在条件分支里面改,或者用一长串?:?:。 用 C++的时候是用一个临时的 lambda ,在条件里 return 。

const int i = [&]() { if (<slow operation A>) return 1; else if (<slow operation A>) return 2; else return 3; }(); 

看 V 站经常有人说 C#功能大杂烩,有没有好一点的办法?

]]>
泛型存 List 的一个问题 tag:www.v2ex.com,2023-07-01:/t/953228 2023-07-01T04:44:00Z 2023-07-02T16:59:54Z exqibao member/exqibao 最近在看视频学习 untiy 没有源码,跟着视频做遇到一个问题。

就是实现继承单例“MySingletonBase”,管理基类“ManagerBase”继承“MySingletonBase”实现单例,“UIManager”又继承“ManagerBase”,现在的问题就是假如有好多个“ManagerBase”的实现类怎么存到一个“List<ManagerBase<MonoBehaviour>> Managers = new List<ManagerBase<MonoBehaviour>>()”里面,主要就是那个泛型“T”不知道怎么处理,一直提示类型不对。

看视频就看到“UIManager : ManagerBase<UIManager>”是这么写,至于 List 怎么改都存不进去,存进去后主要就是遍历执行 ManagerBase 的方法,泛型 T 对于“ManagerBase”也没有什么用,只为了传给“MySingletonBase”。

怎么才能正常存 List 并遍历执行 ManagerBase 的方法?

using System.Collections; using System.Collections.Generic; using UnityEngine; public class MySingletonBase <T> : MonoBehaviour where T : MonoBehaviour { private static T instance; public static T Instance { get { return instance; } } void Awake() { instance = this as T; } } 
using System; using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public abstract class ManagerBase<T> : MySingletonBase<T> where T : MonoBehaviour { public List<MonoBase> MOnos= new List<MonoBase>(); public void Register(MonoBase monoBase) { if (!Monos.Contains(monoBase)) { Monos.Add(monoBase); } } .... } 
using System; using System.Collections; using System.Collections.Generic; using Net; using UnityEngine; public class UIManager : ManagerBase<UIManager> { protected override byte GetMessageType() { return MessageType.Type_Acount; } } 
]]>
有 C++基础入门 C#有推荐的书或课程吗,准备学习 unity 游戏开发 tag:www.v2ex.com,2023-06-05:/t/945937 2023-06-05T06:59:08Z 2023-06-07T23:07:23Z Wataru member/Wataru WPF 实现拟物音量控件 tag:www.v2ex.com,2023-06-02:/t/945156 2023-06-02T02:31:28Z 2023-06-12T00:23:50Z yanjinhua member/yanjinhua WPF 实现拟物音量控件

控件名:Wheel

作 者:WPFDevelopersOrg - 俞宏伟

原文链接https://github.com/WPFDevelopersOrg/SimulationControl

1 )创建 Wheel.xaml 代码如下:

<UserControl x:Class="TopControl.Wheel" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:TopControl" mc:Ignorable="d" Width="30" Height="180"> <Grid> <!-- 进度 --> <Grid Width="2" Background="#0a0a0a" Height="180" HorizOntalAlignment="Left" VerticalAlignment="Bottom"/> <Grid Width="2" x:Name="Grid_Value" Height="0" HorizOntalAlignment="Left" VerticalAlignment="Bottom"> <Grid Height="180" VerticalAlignment="Bottom"> <Grid.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#f0d967"/> <GradientStop Offset="1" Color="#33b08d"/> </LinearGradientBrush> </Grid.Background> </Grid> </Grid> <Grid Background="#0a0a0a" Width="26" HorizOntalAlignment="Right" Height="180" Margin="2,0,0,0"/> <!-- 滚轮 --> <Grid x:Name="WheelArea" Height="176" Width="22" HorizOntalAlignment="Right" Margin="0,0,2,0" MouseDown="WheelArea_MouseDown" MouseMove="WheelArea_MouseMove" MouseUp="WheelArea_MouseUp" MouseWheel="WheelArea_MouseWheel"> <Grid.Background> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Color="#141414" Offset="0"/> <GradientStop Color="#3c3c3c" Offset="0.5"/> <GradientStop Color="#141414" Offset="1"/> </LinearGradientBrush> </Grid.Background> <Grid x:Name="LayerBox" IsHitTestVisible="False"/> </Grid> </Grid> </UserControl> 

2 )创建 Wheel.xaml.cs 代码如下:

using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace TopControl { public partial class Wheel : UserControl { public Wheel() { InitializeComponent(); Loaded += Wheel_Loaded; } #region 属性 public int MinValue { get; set; } = -720; public int MaxValue { get; set; } = 720; public int Value { get; set; } = -720; #endregion #region 控件事件 private void Wheel_Loaded(object sender, RoutedEventArgs e) { InitLayer(); } private void WheelArea_MouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left) { BeginDrag(); } } private void WheelArea_MouseMove(object sender, MouseEventArgs e) { if (_dragMode) { Drag(); } } private void WheelArea_MouseUp(object sender, MouseButtonEventArgs e) { if (e.ChangedButton == MouseButton.Left && _dragMode) { EndDrag(); } } private void WheelArea_MouseWheel(object sender, MouseWheelEventArgs e) { if (_dragMode) return; int offset = e.Delta / 120; if (offset < 0 && Value > MinValue) { Value += offset; UpdateProgress(); _wheelLayer.AngleOffset -= offset * _wheelSpeed; _wheelLayer.UpdateLayer(); } else if (offset > 0 && Value < MaxValue) { Value += offset; UpdateProgress(); _wheelLayer.AngleOffset -= offset * _wheelSpeed; _wheelLayer.UpdateLayer(); } } #endregion #region 鼠标操作 private void BeginDrag() { _dragMode = true; WheelArea.CaptureMouse(); _dragStart = Mouse.GetPosition(WheelArea); _angleStart = _wheelLayer.AngleOffset; _valueStart = Value; _offsetDown = Value - MinValue; _offsetUp = Value - MaxValue; } private void Drag() { double offset_y = Mouse.GetPosition(WheelArea).Y - _dragStart.Y; if (offset_y < _offsetUp) offset_y = _offsetUp; else if (offset_y > _offsetDown) offset_y = _offsetDown; double offset_angle = offset_y * _wheelSpeed; Value = _valueStart - (int)offset_y; _wheelLayer.AngleOffset = _angleStart + offset_angle; UpdateProgress(); _wheelLayer.UpdateLayer(); } private void EndDrag() { _dragMode = false; WheelArea.ReleaseMouseCapture(); } #endregion #region 私有方法 /// <summary> /// 初始化图层 /// </summary> private void InitLayer() { _wheelLayer.Width = LayerBox.ActualWidth; _wheelLayer.Height = LayerBox.ActualHeight; LayerBox.Children.Add(_wheelLayer); _wheelLayer.Init(); _wheelLayer.UpdateLayer(); } /// <summary> /// 更新进度 /// </summary> private void UpdateProgress() { Grid_Value.Height = (double)(Value - MinValue) / (MaxValue - MinValue) * 180; } #endregion #region 字段 private readonly WheelLayer _wheelLayer = new WheelLayer(); private Point _dragStart = new Point(); private double _angleStart = 0; private int _valueStart = 0; private bool _dragMode = false; /// <summary>滚轮速度</summary> private readonly double _wheelSpeed = 0.7; /// <summary>最大向上偏移</summary> private double _offsetUp; /// <summary>最大向下偏移</summary> private double _offsetDown; #endregion } } 

3 )创建 WheelLayer.cs 代码如下:

using MathUtil; using System; using System.Collections.Generic; using System.Runtime.CompilerServices; using System.Windows; using System.Windows.Media; using WpfUtil; namespace TopControl { public class WheelLayer : SingleLayer { #region 属性 /// <summary>槽高度:180px - 上下边框( 4px )</summary> public int GrooveHeight { get; set; } = 176; /// <summary>角度:圆弧切线与槽边的夹角</summary> public int Angle { get; set; } = 90; /// <summary>刻度线数量</summary> public int LineCount { get; set; } = 90; /// <summary>角度偏移</summary> public double AngleOffset { get; set; } = 0; #endregion #region 公开方法 public override void Init() { // 起点、终点、中点 Point2D startPoint = new Point2D(0, 0); Point2D endPoint = new Point2D(GrooveHeight, 0); Point2D centerPoint = startPoint.CenterWith(endPoint); // 向量:中点 -> 起点 Vector2 centerToStart = new Vector2(centerPoint, startPoint); centerToStart.Rotate(-90); // 向量:终点 -> 中点 Vector2 endToCenter = new Vector2(endPoint, centerPoint); endToCenter.Rotate(-90 + Angle); // 圆心 _circleCenter = centerToStart.IntersectionWith(endToCenter); // 向量:圆心 -> 起点 Vector2 vector = new Vector2(_circleCenter, startPoint); _radius = vector.Distance; _anglePerLine = 360.0 / LineCount; } protected override void OnUpdate() { // 最高点 Point2D top = new Point2D(_circleCenter.X, _circleCenter.Y - _radius); // 向量:圆心 -> 最高点 Vector2 vector = new Vector2(_circleCenter, top); double max = Math.Abs(vector.Target.Y); // 偏移角度 vector.Rotate(AngleOffset); // 开始旋转计算刻度位置 List<Point2D> pointList = new List<Point2D>(); for (int counter = 0; counter < LineCount; counter++) { if (vector.Target.Y < 0) pointList.Add(vector.Target); vector.Rotate(-_anglePerLine); } // 绘制刻度线 foreach (var item in pointList) DrawHorizontalLine(item.X, Math.Abs(item.Y) / max); } #endregion #region 私有方法 /// <summary> /// 绘制水平线 /// </summary> [MethodImpl(MethodImplOptions.AggressiveInlining)] private void DrawHorizontalLine(double y, double opacity) { Pen pen = new Pen(new SolidColorBrush(Color.FromArgb((byte)(opacity * 255), 32, 32, 32)), 1); Pen pen2 = new Pen(new SolidColorBrush(Color.FromArgb((byte)(opacity * 255), 64, 64, 64)), 1); _dc.DrawLine(pen, new Point(2, y - 0.5), new Point(Width - 2, y - 0.5)); _dc.DrawLine(pen2, new Point(2, y + 0.5), new Point(Width - 2, y + 0.5)); } #endregion #region 字段 /// <summary>圆心</summary> private Point2D _circleCenter = new Point2D(0, 0); /// <summary>半径</summary> private double _radius = 0; /// <summary>刻度线之间的夹角</summary> private double _anglePerLine = 0; #endregion } } 

4 )创建 WheelExample.xaml 代码如下:

<wd:Window x:Class="TopControl.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:local="clr-namespace:TopControl" xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers" mc:Ignorable="d" Background="#1e1e1e" Title="https://github.com/WPFDevelopersOrg/SimulationControl - 俞宏伟" Height="450" Width="800"> <Grid> <local:Wheel HorizOntalAlignment="Left" VerticalAlignment="Top" Margin="50"/> </Grid> </wd:Window> 

更多代码请访问GitHub源码地址

]]>
ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86