C#相关
文章平均质量分 68
不全
这个作者很懒,什么都没留下…
展开
-
面向对象思想总结(值得一读)
一、面向过程的思想和面向对象的思想面向对象和面向过程的思想有着本质上的区别,作为面向对象的思维来说,当你拿到一个问题时,你分析这个问题不再是第一步先做什么,第二步再做什么,这是面向过程的思维,你应该分析这个问题里面有哪些类和对象,这是第一点,然后再分析这些类和对象应该具有哪些属性和方法。这是第二点。最后分析类和类之间具体有什么关系,这是第三点。面向对象有一个非常重要的设计思维:合适的方法应该出现在合适的类里面。二、简单理解面向对象就是在程序里面首先分解出来的应该是注意不再是一步一...转载 2022-04-20 11:48:45 · 2811 阅读 · 1 评论 -
EF codeFirst Database.SetInitializer的四种选项
public MyDbContext() : base("name=Default"){//不会创建数据库,生产环境建议用这个设置,表通过sql来创建或修改Database.SetInitializer<MyDbContext>(null); // 数据库不存在时重新创建数据库,会删除主项目或其他插件的表Database.SetInitializer<MyDbContext>(new CreateDatabaseIfNotExists<MyDbContext>.转载 2022-03-31 12:23:32 · 639 阅读 · 0 评论 -
C#之Yield Return语法的作用和好处
还是和以前一样,我先上代码,请大家先拿到我的代码或者你跟着敲,运行看效果,以及理解每行带代码的作用。我们要带着为什么要用Yield这个关键字,不用可以吗这个目的去学知识,我相信会更加的有意思。首先我贴出平时正常输出偶数集合的办法/* * * 学习Yield Return 语法 * 使用两个方法,显示1 - 100之间的全部偶数 * * */using System;using System.Collections.Generic;namespace YieldRe转载 2022-03-30 15:09:12 · 909 阅读 · 0 评论 -
开源的Word读写组件DocX
1、前言读写Offic格式的文档,大家多少都有用到,可能方法也很多,组件有很多。这里不去讨论其他方法的优劣,只是向大家介绍一款开源的读写word文档的组件。读写Excel有NPOI,读写Word,那看看DocX吧。DocX是一个以非常直观简单的方式操作Word2007/2010文件的轻量级.NET组件。它的速度非常快,而且不需要安装微软的Office软件。在中国,免费并且小巧的WPS有足够的理由让很多用户放弃庞大的Office,那在实际软件开发过程中,这玩意就有用处了。遗憾是不支持2003,但总归.转载 2021-11-02 17:17:28 · 987 阅读 · 0 评论 -
DotNetZip实现带密码压缩
DotNetZip是一个开源的免费类库,主要提供了快速操作zip文件的工具集,VB、C#任何.Net语言都可以通过它创建、解压缩zip文件。我使用该类库最主要的目的还是因为它可以创建带密码保护的压缩文件。只有设置了zip.Password = "password"之后,被压缩的文件才会有密码保护。压缩:/// <summary>/// 压缩文件/文件夹/// </summary>/// <param name="filePath">需要压缩的文件/文件夹路原创 2021-10-14 09:41:37 · 1210 阅读 · 0 评论 -
SharpCompress开源库实现zip无乱码压缩和解压
SharpCompress是用到现在,感觉功能最强大的压缩、解压开源插件。它支持处理zip、rar、7z等多种格式的压缩文件,使用方式也很简单。当然,最让我难受的是创建压缩文件的时候没法设置密码~所以才有了上面DotnetZip的代码。SharpCompress版本不同,设置ArchiveEncoding的方式也不同,默认设置了UTF8防止解压乱码。通过设置ArchiveType切换生成不同格式压缩文件压缩/// <summary>/// 压缩文件/文件夹/// </s原创 2021-10-14 09:35:58 · 1349 阅读 · 0 评论 -
Dapper的入门(多表批量插入)
简介: 不知道博客怎么去写去排版,查了好多相关博客,也根据自己做过项目总结,正好最近搭个微服务框架,顺便把搭建微服务框架所运用的知识都进行博客梳理,为了以后复习,就仔细琢磨写一下自己在微服务框架中对Dapepr的理解以及项目中应用。 dapper只是一个代码文件,完全开源,你可以在项目里任何位置,来实现数据到对象ORM操作(当然先引用Dapper文件),体积小速度快。使用好处增删改查比较快,不用自己写sql,因为这都是重复技术含量低的工作,还有程序中大量的数据库中读取数据然后创建model,...转载 2021-08-25 11:59:07 · 2781 阅读 · 0 评论 -
C#配置文件configSections详解
一、问题需求: 在项目中经常遇到需要写配置文件地方,目的就是不想在程序中关于一些信息写死,发布的时候只需要修改一下配置文件就可以,不需要每次都修改程序,如项目名称、数据库连接字符串、IP端口之类 的;对于小项目或者服务程序,配置信息可以通过系统自带的appSettings进行配置,但大项目或者配置信息太多,如果都用appSettings来配置就感觉比较杂乱,运维人员在修改配置的时候不好修改,而且如果想找某一模块相关或者某一节点配置容易出错,这时如果能分类管理,例如跟数据库相关的写到一个节点里,跟某个业务独立转载 2021-07-15 18:05:34 · 372 阅读 · 0 评论 -
ASP.net网站配置文件的读写管理(将网站的配置信息保存到单独配置文件的配置、读写)
前几天由于公司的业务需求,某个系统需要设置一些配置参数,将这些参数保存在数据库显得过于的复杂,并且系统频繁的读取配置信息不合适,不便于以后的管理,显然保存在配置文件中是最好的方式了。后面需要对这些配置信息进行修改管理,管理员当然不希望参数每次去变时去直接修改网站根目录下的Web.config文件,要是能够另外的保存一个文件,并且其它的网站能够同时访问这个文件,直接进行修改就最好了。好了我们根据这个具体的实际需求来进行下面的步骤:一、将网站的配置信息保存到单独配置文件 我们的配置信息一般保存在网.转载 2021-07-15 17:59:06 · 779 阅读 · 0 评论 -
ASP.NET基础之HttpModule学习
ASP.NET基础之HttpModule学习原创 2021-07-15 12:44:32 · 130 阅读 · 0 评论 -
<httpHandlers>的配置和使用
前两天 领导让改了一个控件,就是 百度编辑器的 前台处理和后台处理分开,简单的说,是把 .ashx的页面单独编译成dll ,前后想了想,.ashx文件又没有cs代码,怎么能编译?尝试了几次没能成功,后来用了这么一个办法,问题成功解决! 思路:通过 httpHandlers 自定义 http 访问时做的处理,当前台的JS 访问到 .ashx文件时,我就把他指向一个类去处理,类可以编译成dll ,所有问题就解决了。具体代码: config 配置 <system.web> ...转载 2021-07-15 12:42:36 · 379 阅读 · 0 评论 -
HttpHandler开发的两个重点问题
HttpHandler开发的两个重点问题原创 2021-07-15 10:50:56 · 111 阅读 · 0 评论 -
Asp.net在线压缩,ICSharpCode.SharpZipLib 初级使用
最近做的一个项目需要使用到在线解压缩的过程。需求是这样的,用户可以将所有需要上传的文件进行打包然后上传到服务器,服务器将压缩包进行解压,然后对其中的文件进行逐个处理。其中将压缩包进行服务器端解压的过程就是通过ICSharpCode.SharpZipLib.dll来实现的。对于这个dll文件,可以通过搜索这个dll文件的名字下载到。原来没有使用过,所以拿来帮助文档依葫芦画瓢。1. 在项目中添加对ICSharpCode.SharpZipLib.dll的引用;2. 在需要使用到ICSharpC转载 2021-07-09 12:03:53 · 437 阅读 · 0 评论 -
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
依赖倒置原则(DIP)依赖倒置(Dependency Inversion Principle,缩写DIP)是面向对象六大基本原则之一。他是指一种特定的的解耦形式,使得高层次的模块不依赖低层次的模块的实现细节,依赖关系被颠倒(反转),从而使得低层次模块依赖于高层次模块的需求抽象.该原则规定:高层次的模块不应该依赖低层次模块,二者都应该依赖其抽象接口. 抽象接口不应该依赖于具体实现,而具体实现则应该依赖于抽象接口.通过如下一个简单的示例,我们来看一下,我们通过一个简单地下单流程向我们的用户发送相转载 2021-03-23 14:15:35 · 260 阅读 · 0 评论 -
为ASP.NET MVC应用程序创建单元测试
本教程的目的是解释如何为 ASP.NET MVC 应用程序中的控制器编写单元测试。我们将讨论如何创建三种不同类型的单元测试。您将了解如何测试控制器操作返回的视图、如何测试控制器操作返回的视图数据,以及如何测试一个控制器操作是否重定向到另一个控制器操作。创建测试控制器我们首先创建要测试的控制器。程序清单 1 中包含名称为 ProductController 的控制器。程序清单 1 ProductController.csusing System;using System.Web.Mvc;转载 2021-03-21 17:06:02 · 192 阅读 · 0 评论 -
VS2019 ASP .NET MVC项目如何新建区域(Area)
由于在VS2019新的MVC5项目下新建的区域选项被折叠至另外的地方,所以新建区域的方式有别于之前的版本 操作:项目右键->添加->新搭建基架的项目->通用/MVC/区域原创 2021-03-21 15:53:58 · 951 阅读 · 2 评论 -
C# 单元测试(入门)
注:本文示例环境VS2017 XUnit 2.2.0 单元测试框架 xunit.runner.visualstudio 2.2.0 测试运行工具 Moq 4.7.10 模拟框架什么是单元测试?确保软件应用程序按作者的期望执行操作,其中最好的一种方法是拥有自动化测试套件。 可以对软件应用程序进行各种不同的测试,包括集成测试、Web 测试、负载测试等。 测试各个软件组件或方法的单元测试是最低级测试。所谓单元测试(unit testing),就是开发者编写的一小段代码,用于对软件中的最小单元进转载 2021-03-21 12:50:39 · 5349 阅读 · 0 评论 -
ASP.NET MVC中错误处理方式
aspnet mvc的错误处理方式主要有以下两种方式一:通过对controller或者action标记HandleError属性,然后指定一个错误页即可。这种方式最简单,不需要额外增加action ,仅仅需要增加错误页,但是不能记录日志(因为没有action,其实在aspx中也可调用记录日志的方法)。这个错误页还可以定义为强类型,类型为HandleErrorInfo,具体的Model又框架传递,可获取具体的异常信息。///<summary>///标记了Hand...原创 2021-03-10 16:25:26 · 641 阅读 · 0 评论 -
asp.net c# 通过消息队列处理高并发请求(以抢小米手机为例)
网站面对高并发的情况下,除了增加硬件, 优化程序提高以响应速度外,还可以通过并行改串行的思路来解决。这种思想常见的实践方式就是数据库锁和消息队列的方式。这种方式的缺点是需要排队,响应速度慢,优点是节省成本。演示一下现象创建一个在售产品表CREATE TABLE [dbo].[product]( [id] [int] NOT NULL,--唯一主键 [name] [nvarchar](50) NULL,--产品名称 [status] [int] NULL ,--0未售出转载 2021-03-05 15:33:39 · 2182 阅读 · 0 评论 -
死锁问题
根据不少同学的面试反馈,最近阿里和字节跳动面试时都对多线程相关的问题进行了重点考察,并且面试官都问到了死锁问题。如字节跳动考察的问题是:什么是线程死锁? 死锁如何产生? 如何避免线程死锁?本文便就此问题进行分析,将用尽可能通俗的语言由浅入深地帮助大家理解死锁,了解其产生的原理与对应的解决方案。什么是线程死锁线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的 synchronized 代码块时,便占有了资源,直到它退出该代.转载 2021-03-03 16:41:26 · 196 阅读 · 1 评论 -
.Net Framework 之 框架图
.Net Framework框架图,如下图: 它表明了这么一种编写软件的方式或者说表明了.Net平台下开发软件的思想和规范。 .Net Framework框架实际只包含两部分: 1、公共语言运行时(CLR: Common Language Runtime) ; 2、框架类库(FCL: Framework Class Library)。 可以设想自己是一个软件项目经理, 很不凑巧的是手里面的程序员有精通VB、VC++和C#的程序员各一名, 那么如何来使这些程序员写作开.转载 2021-03-01 16:38:17 · 2005 阅读 · 0 评论 -
.Net编译原理
.Net平台简介:.Net是微软搭建的一个平台,C#语言可以通过.Net平台来编写、部署、运行.Net应用程序,当然,不仅仅是C#语言,其他.Net语言也可以运行在此平台之上,如VB.Net,但在这着重于C#的讲解;则.Net平台式一个跨语言的平台;.Net平台中内部有多种机制和类库,但更为重要的有两大组成:1. FCL-框架类库,这是微软事先定义好的类的集合,里面包含了常用的类,以至于方便程序员调用;2.CLR-公共语言运行时,这是创建、部署、运行.Net程序的必备环境,若没有此环境,程序原创 2021-03-01 15:45:26 · 1220 阅读 · 0 评论 -
C# 静态构造函数和构造函数
构造函数这个概念,在我们刚开始学习编程语言的时候,就被老师一遍一遍的教着。亲,现在你还记得静态构造函数的适用场景吗?如果没有,那么我们一起来复习一下吧。静态构造函数是在构造函数方法前面添加了static关键字之后形成的,并且没有修饰符(public,private),没有参数。静态构造函数有哪些特点呢:静态构造函数没有修饰符修饰(public,private),因为静态构造函数不是我们程序员调用的,是由.net 框架在合适的时机调用的。 静态构造函数没有参数,因为框架不可能知道我们需要在函数中转载 2021-03-01 15:17:58 · 1011 阅读 · 0 评论 -
什么是死锁?死锁产生的原因?如何避免死锁?
一、什么是死锁?如果一个进程集合里面的每个进程都在等待这个集合中的其他一个进程(包括自身)才能继续往下执行,若无外力他们将无法推进,这种情况就是死锁,处于死锁状态的进程称为死锁进程。二、死锁产生的原因?1.因竞争资源发生死锁现象:系统中供多个进程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象;(1)可剥夺资源和不可剥夺资源:可剥夺资源是指某进程在获得该类资源时,该资源同样可以被其他进程或系统剥夺,不可剥夺资源是指当系统把该类资源分配给某个进程时,不能强制收回,只能转载 2021-03-01 13:42:09 · 9702 阅读 · 1 评论 -
ASP.NET(C#) 面试总结面试题大全
一、对于 Web 性能优化,您有哪些了解和经验吗?出现指数:五颗星主要考点:这道题是博主在博客园的新闻里面看到的,回想之前几年的面试经历,发现此题出现概率还是比较高的。因为它的考面灰常广,可以让面试官很快了解你的技术涉及面以及这些技术面的深度。参考答案:这个问题可以分前端和后端来说。1、前端优化(1)减少 HTTP 请求的次数。我们知道每次发送http请求,建立连接和等待相应会花去相当一部分时间,所以在发送http请求的时候,尽量减少请求的次数,一次请求能取出的数据就不要分多次发送。(2)启用浏转载 2021-03-01 13:27:34 · 2194 阅读 · 0 评论 -
.Net常见的IOC框架及AOP框架
IOC框架Unity:微软patterns&practicest团队开发的IOC依赖注入框架,支持AOP横切关注点。 MEF(Managed Extensibility Framework):是一个用来扩展.NET应用程序的框架,可开发插件系统。 Spring.NET:依赖注入、面向方面编程(AOP)、数据访问抽象,、以及ASP.NET集成。 Autofac:最流行的依赖注入和IOC框架,轻量且高性能,对项目代码几乎无任何侵入性。 Ninject:基于.NET轻量级开源的依赖注入IOC框转载 2021-03-01 13:24:38 · 2389 阅读 · 0 评论 -
AOP面向方面编程---postsharp
PostSharp是一个用于在.NET平台上实现AOP(Aspect-Oriented Programming,面向方面编程)的框架,现通过简单的示例代码来演示如何使用postsharp。1、新建一个控制台应用程序。.net框架是4.6.1版本的。2、创建一个类CoreBusiness,表示用于完成项目的核心业务。class CoreBusiness { [Log(ActionName = "Work_1")] public void Work_1()转载 2021-03-01 13:18:07 · 2089 阅读 · 0 评论 -
高并发下数据库分库分表面试题整理
1. 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?面试题剖析为什么要分库分表?(设计高并发系统的时候,数据库层面该如何设计?)说白了,分库分表是两回事儿,大家可别搞混了,可能是光分库不分表,也可能是光分表不分库,都有可能。我先给大家抛出来一个场景。假如我们现在是一个小创业公司(或者是一个 BAT 公司刚兴起的一个新部门),现在注册用户就 20 万,每天活跃用户转载 2021-03-01 11:09:05 · 436 阅读 · 0 评论 -
浅聊读写分离
一、前言 最近工作很繁忙,同事的离职给我带来了很多的事情,投身于博客的时间比较少,另外在宿舍住可能部分的时间要随大流,鹤立鸡群有一些不好,当然这也是给自己找借口和理由,趁着周末整理下最近的感悟;另外公司用的ElasticSearch,最近我也在探索,微服务方面暂时搁浅,待到搬出宿舍的时候在开始一波666的操作;另外随着数据量增加自己还需要去接触波大数据东西,不得说真是有些挑战和机遇,看自己如何把握了;再送给自己一句话:少找一些无用借口和理由,撸起袖子就是干! 开始今天主题读写分离;二、...转载 2021-03-01 10:19:09 · 185 阅读 · 0 评论 -
C# SQLServer导入大批量数据
说来惭愧,关于批量导入数据,一直采用的是最原始的方式,一条一条插入,或者100条一块批量插入,这种方式,五十步笑百步,并没有明显的性能提升,昨天在从别的库查询数据到DataTable内存中,然后插入另外一个库的时候,时间慢的要死,区区10W条数据,竟然要执行三分半。。。声明一下,目标库是SQL Server。百度了一下,SQLBulk闯入了我的视野,其实以前也了解过这个家伙,不过一直没有应用,直接上代码。。。public int SqlBulkInsertForSQLServer(Da转载 2021-01-23 14:07:10 · 526 阅读 · 1 评论 -
ASP.NET MVC下的四种验证编程方式
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其有效性,我们将针对参数的验证成为Model绑定。总地来说,我们可以采用4种不同的编程模式来进行针对绑定参数的验证。一、手工验证绑定的参数在定义具体Action方法的时候,对已经成功绑定的参数实施手工验证无疑是一种最为直接的编程方式,接下来我们通过一个简单的实例来演示如何将参数验证逻辑实现在对应的Action方法中,并在没有通过验证的情况下将错误信息转载 2020-11-10 10:00:42 · 251 阅读 · 0 评论 -
如鹏网笔记
https://www.cnblogs.com/DotNetStu/tag/%E7%AC%94%E8%AE%B0/原创 2020-11-06 09:59:57 · 267 阅读 · 0 评论 -
适配器(Adapter)模式
适配器(Adapter)模式:结构型模式 适配,即在不改变原有实现的基础上,将原先不兼容的接口转换为兼容的接口,把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而无法一起工作的两个类能够在一起工作;该模式是作为两个不兼容的接口之间的桥梁,它结合了两个独立接口的功能。这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。动机 在软件系统中,由于应用环境的变化,常常需要将“一些现存的对象”放在新的环境中应用,但是新环境要求的接口是这些现存对象所不满足的。...原创 2020-09-24 11:40:39 · 258 阅读 · 0 评论 -
C#中的深拷贝与浅拷贝
C#中的深拷贝与浅拷贝浅拷贝和深拷贝之间的区别: 浅拷贝:是指将对象中的数值类型的字段拷贝到新的对象中,而对象中的引用型字段则指复制它的一个引用到目标对象。如果改变目标对象中引用型字段的值他将反映在原始对象中,也就是说原始对象中对应的字段也会发生变化。 深拷贝:与浅拷贝不同的是对于引用的处理,深拷贝将会在新对象中创建一个新的和原始对象中对应字段相同(内容相同)的字段,也就是说这个引用和原始对象的引用是不同的,我们在改变新对象中的这个字段的时候是不会影响到原始对象中对应字段的内容。所...转载 2020-09-22 17:11:03 · 278 阅读 · 1 评论 -
原型(Prototype)模式
原型(Prototype)模式:创建型模式 使用原型实例指定创建对象的种类,然后通过拷贝这些原型实例来创建新的对象。动机 在软件系统中,经常面临着“某些结构复杂的对象”的创建工用;由于需求变化,这些对象经常面临着剧烈变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向客户端程序隔离出这些易变对象,从而使得依赖这些易变对象的客户端程序不随着需求改变而改变?要点 Prototype模型同样用于隔离对象的使用者和具体类之间的紧耦合...原创 2020-09-22 16:30:20 · 205 阅读 · 0 评论 -
面向对象
面向对象(Object Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。 谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。其初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的...转载 2020-09-21 11:38:25 · 789 阅读 · 0 评论 -
抽象工厂模式-与-工厂方法模式区别
定义区别:工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类 区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品等级结构的。 再来看看工厂方法模式与抽象工厂模式对比:举个例子说明下:用种蔬菜的例子来说明事实,最初的时候,由于规模转载 2020-09-21 10:58:37 · 161 阅读 · 0 评论 -
生成器(Builder)模式
生成器(Builder)模式:创建型模式 将一个复杂的对象的构建(builder)和它的表示(复杂对象生成的director类)分离,使得同样的构建过程可以创建不同的表示。核心是给指导者(Director)一个生成器,但具体方式不指定。动机 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成,由于需求的变化,这个复杂对象的各个部分子对象经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。如何应对这种变化?如何提供一种“...原创 2020-09-19 15:00:58 · 216 阅读 · 0 评论 -
C# web.config中的连接字符串中关于 providerName 特性
关于这个问题,在网上找到的资料很少,也没有发现具体解决的方式:先做一下笔记,等有什么新突破时,在补充:两种方式为appSettings和connectionStrings<configuration> <appSettings> <add key="connstr1" value="Data Source=.;Initial Catalog=DBName;Integrated Security=true"/> &l...转载 2020-09-18 17:53:54 · 1187 阅读 · 0 评论 -
C#中全局异常捕获
C# 全局异常捕获开发界有那么一个笑话,说是“「我爱你」三个字,讲出来只要三秒钟,解释要三小时,证明却要一辈子。「Bug」三个字母,发现需要三秒,找到需要三小时,Debug却要一辈子。”。就算是资深的程序员也会写出Bug,但Bug并不可怕,重要的是在Bug发生的时候迅速定位Bug。在Visual Studio中调试的时候,我们可以借助VS的调试工具进行调试,一旦出现未处理的异常时,VS也会在第一时间捕获并显示出来。随着开发的进行,终于程序要打包上线了。那么在上线之出了BUG我们该如何处理呢?.转载 2020-09-12 10:33:50 · 5924 阅读 · 0 评论