c#笔记
目录
文章目录
common use
//预览版
aa??=bb;
postMan (对外参数接口最好为可空类型)
- Api参数为(Guid Id)
传入有Id,没有值 --> 后台接收为 Guid.Emtry
传入没有Id --> 找不到方法报错
- Api参数为(Guid? Id)
传入有Id,没有值 --> 后台接收为 null
传入没有Id --> 后台接收为 null
- 数据库为bit,model为bool?时,接口传入参数 123 不能为 “123”
bool? "1" --> null "true" --> true
- Api参数为数组时
(Guid? Id) --> 直接url, index/Id="1234657"
(List<Guid?> IDs) --> body=["1","2"] ,type=json。。
4.常见提示、错误
4.1 缺少对公共可见类型或成员“UserController”的XML注释 ----> 解决方案:项目属性 -> 生成 ->禁止显示警告 1591
baseData
1.新建类库
id+ domain+ url 匹配
!licenseFileModel.ListSystem[0].ListWebApi.Exists(x=>x.WebApiUrl=="CC/00")
true
licenseFileModel.ListSystem[0].ListWebApi.Find(x=>x.WebApiUrl=="CC/00")==null
true
licenseFileModel.ListSystem[0].ListWebApi.Find(x=>x.WebApiUrl=="CC/DDDD")==null
false
!licenseFileModel.ListSystem[0].ListWebApi.Exists(x=>x.WebApiUrl=="CC/DDDD")
false
licenseFileModel?.ListSystem
null
licenseFileModel?.ListSystem.Find(x => (x.SystemID + string.Empty) == validateSystemID);
null
null.Find(x => (x.SystemID + string.Empty) == validateSystemID);
error CS0023: 运算符“.”无法应用于“<null>”类型的操作数
null.ToString() --> ""
null.value 会报错 // null??string.Emtry
string aaa = ((EnumQuestionnaireType)1).GetDescription();
未能找到路径“D:\tempSy\syTemp.Test\bin\jb.exe”的一部分。
清理单个项目(清理解决方案没用)
AppDomain实现"热插拔"
很多时候,我们都想使用(开发)USB式(热插拔)的应用,例如,开发一个WinForm应用,并且这个WinForm应用能允许开发人员定制扩展插件,又例如,我们可能维护着一个WinService管理系统,这个WinService系统管理的形形色色各种各样的服务,这些服务也是各个"插件式"的类库
就是插件版本dll更新会有不同操作,但是调用的代码却不会改变。版本迭代只需要更新插件dll
eg:Winform通过 AssemblyLoader --> 加载DLL,反射调用DLL里面的方法
优点:Winform版本变更,只需要更新DLL,Winform版本不需要重装,解决多家企业、学校重装winform麻烦
项目示例: Git -> AppDomainTest
事务
- c#事务等级很低,表有主外键关系时,c#事务先锁住主表(update主表or 给主表添加锁),否则高并发的时候,删除子表之后,删除主表的时候容易死锁
- 事务里面尽量只做数据库操作,逻辑判断,变量定义什么的最好写在外面
- 事务不会自动提交
webClient
SY_Util.DLL
using SY_Util;
// 调用WebApi,参数为单值
JsonConvert.DeserializeObject<Model>(new WebApiUtil().UploadData("/a/b?c="+1, "POST"));
// 调用WebApi,参数为Json
new WebApiUtil().UploadJson("/a/b", JsonConvert.SerializeObject(new ConfigInputModel()), "POST");
读取js 、 Json 内容
// json
{
"type": "object"
}
// js
{
"name": "111",
"content": "222",
"type": "js"
}
// 读取js
string json = System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/testJs.js");
dynamic jsonObj = JsonConvert.DeserializeObject(json) as dynamic;
string type = jsonObj?.type?.ToString() ?? "";
// 读取json (同理)
string json1 = System.IO.File.ReadAllText(AppDomain.CurrentDomain.BaseDirectory + "/testJson.json");
dynamic jsonObj1 = JsonConvert.DeserializeObject(json) as dynamic;
string type1 = jsonObj1?.type?.ToString() ?? "";
// 序列化取值
//dynamic jsonResult = JsonConvert.DeserializeObject<dynamic>(json);
//dynamic name = jsonResult["type"].Value;
Excel操作
SY_Util.DLL
using SY_Util;
public ActionResult DtGoExcel()
{
string sql = @"SELECT * FROM Stu";
DataTable table = ExecSql(Sql);
//DataTable --> 文件流
Stream stream = NopiExcel.StreamFromDataTable(table, ".xls");
//拷贝流 (一个文件流只能使用一次)
MemoryStream outPutFileStream = new MemoryStream();
stream.CopyTo(outPutFileStream);
outPutFileStream.Position = 0;
//stream只能拷贝一次
MemoryStream outPutFileStream1 = new MemoryStream();
outPutFileStream.CopyTo(outPutFileStream1);
outPutFileStream1.Position = 0;
//文件流 --> DataTable
DataTable dt = NopiExcel.ExcelToTable(stream, ".xls", 0, 0);
//Excel文件 --> DataTable 通过文件路径转为DataTable
DataTable dt1 = NopiExcel.ExcelToDataTable(AppDomain.CurrentDomain.BaseDirectory + @"upload\in\stuExcel.xls");
//stream --> Excel文件
NopiExcel.WriteSteamToFile(NopiExcel.StreamToMemoryStream(outPutFileStream), @"C:\Users\sy\Desktop\123.xls");
//DataTable --> model强类型 (excel列头名称需要对应上model字段名)
List<StuModel> stuList = dt.ToList<StuModel>();
return File(outPutFileStream1, "application/vnd.ms-excel", "给下载Excel一个默认名称.xls");
}
导入压缩包图片
HttpPostedFileBase file = Request.Files["file"];
if (file.ContentLength == 0)
{
return Json(new { errcode = 1, errmsg = "请选择上传文件" });
}
string type = file.ContentType.ToLower();
if (!type.Contains("stream") && !type.Contains("zip"))
{
return Json(new { errcode = 1, errmsg = "请导入正确文件" });
}
ZipInputStream s = new ZipInputStream(file.InputStream);
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
//压缩包底下的每个文件的全名 eg: 文件夹名称/图片名称.jpg
string fileName = Path.GetFileName(theEntry.Name);
//只能根据门店和名字修改已存在的数据的图片
if (fileName != string.Empty)
{
string dir = string.Format(@"upload\{0}\{1}\{2}", "sy", "image", DateTime.Now.ToString("yyyyMM"));
//创建自定义文件夹
if (!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + dir))
{
Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + dir);
}
dir += "\\_test" + fileName;
//将压缩包中的文件存入本地自定义路径
FileStream streamWriter = System.IO.File.Create(AppDomain.CurrentDomain.BaseDirectory + dir);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
streamWriter.Close();
}
}
{“对象必须实现 IConvertible。”}
数据库guid --> list 查询 model string
调试时本地参数指针被优化
错误
无法获取本地变量或参数的值,因为它在此指令指针中不可用,可能是因为它已经
问题1:可能是本地的调试代码和运行代码版本不一致
解决方案1
清理解决方案,iis重新运行
问题2:可能是本地调试使用的是Release
解决方案