C#
文章平均质量分 56
muzizongheng
熟悉.net技术栈、web技术栈、ELK、xml/xslt/xsd、mfc、python等;熟悉DICOM、IHE熟悉敏捷、DDD
展开
-
linq 的查询语法和静态扩展的方法语法的对比
https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/linq/query-syntax-and-method-syntax-in-linq根据msdn的说明以及大量StackOverflow的说明,结论是: linq的两者使用没有区别, 性能一致。 查询语法易读,方法语法在.net CLR中全部使用了。查询语法://Query syntax:IEnumerable<int&g...原创 2020-09-29 17:04:07 · 454 阅读 · 0 评论 -
The specified named connection is either not found in the configuration, not intended to be used
今天用EF遇到一个问题, The specified named connection is either not found in the configuration, not intended to be used。。。。。。。原因是我的EF中数据库连接字符串放到App.Config文件中, 而我另一个工程使用此工程时没有添加App.Config 或者Web.Config解决办法:在调用工程原创 2013-07-10 15:44:14 · 1473 阅读 · 0 评论 -
wpf如何获取control template里的元素
wpf中的控件模板里的元素有自己独立的命名域。 因此不能通过FindName来根据x:Name来查找子节点。自己写了一个方法, 通过可视树遍历子节点,然后匹配名字。 如下: private static ChildItem FindVisualChildItemChildItem>(DependencyObject obj) where ChildItem : DependencyObje原创 2013-07-10 15:43:11 · 4889 阅读 · 5 评论 -
C#中如何应用索引器 ( How to use Indexers )
C#中索引器是个好东西, 可以允许类或者结构的实例像数组一样进行索引。 在foreach或者直接索引时很有用。使用索引器可以简化客户端代码, 即调用者可以简化语法,直观理解类及其用途。索引器只能根据声明的形参类型及数量进行区别, 形参命名不能作为区分。概述:使用索引器可以用类似于数组的方式为对象建立索引。get 访问器返回值。 set 访问器分配值。this 关键字用于定义索引器。value 关原创 2013-07-10 15:42:50 · 895 阅读 · 0 评论 -
C# 调用SQL的存储过程的接口及实现
1. 接口为ExecuteStoredProcedure(string storedProcedureName, params ObjectParameter[] parameters)2. 参数为存储过程名字, 及输入值。3. 思路:创建连接(连接中指定了是Sql/MySql/ODBC等等); 创建通用DbCommand;更改Text以及Type;添加通用Parameter(DBParam原创 2013-07-10 15:42:45 · 1851 阅读 · 0 评论 -
C#如何把XSD中HexBinary类型序列化uint类型
xml schema中有hexBinary类型, 我们在实现C#的Serialization时,一般默认把hexBinary映射为byte[],但是有些情况我们需要把 hexBinary映射为uint、int等等这样的类型。 这样我们就需要包装下, 如下:xml schema中定义ID节点, 类型为hexBinary。我们通过中间byte[] IDBinary转为uint ID, 实际使用中直接原创 2013-07-10 15:42:43 · 1644 阅读 · 0 评论 -
Linq 查询多张表,关系表
项目中遇到一个问题, 有4张表, 然后相互之间有3张关系表关联, 一共七张表。想要从顶层表查询最底层表的记录,不能写7层嵌套。 用Linq实现特别简单, 表:User,Role,Module,Function以及User_Role,Role_Module, Module_Function, var fs = (from r in DB.user_role原创 2013-07-10 15:42:32 · 4772 阅读 · 2 评论 -
C# 对象间的 深拷贝 实现
以下的这个类实现了 2个含有部分字段名字相同 的对象的 赋值拷贝。public class ShallowCopyHelper { public static void CopyPropertiesValue(object objFrom, object objTo) { if (null == objFrom) {原创 2013-07-10 15:41:58 · 1102 阅读 · 0 评论 -
WPF error: does not contain a static 'Main' method suitable for an entry point
WPF error: does not contain a static 'Main' method suitable for an entry pointdoes not contain a static 'Main' method suitable for an entry point在Visual Studio中删除App.xaml从别的位置拷贝一个后会出现的编译错误,原因在于默认的App.原创 2013-07-10 15:41:42 · 1962 阅读 · 0 评论 -
C# Unit Test 备注
1. UT工程的编译一定要让依赖的dll在同一目录,即和测试目标dll运行的环境一样。比如 Demo—UT测试Demo工程, 则Demo工程依赖的所有dll必须和Demo输出的可执行环境Demo.dll/Demo.exe在同一目录。这样Demo-UT才能编译通过2.UT工程会生成XXX.testsettings文件,双击这个文件可以配置选项Hosts里 配置是测试32位 还是 64位进程。3.U原创 2013-07-10 15:41:03 · 2331 阅读 · 0 评论 -
MVVM Template
原创 2013-07-10 15:43:47 · 802 阅读 · 0 评论 -
C# 性能分析工具
http://msdn.microsoft.com/zh-cn/vstudio/aa497289(en-us).aspxPerformanceThis section includes information on logging, tracing, profiling, and other diagnostic techniques for analyzing and monitoring y原创 2013-07-10 15:43:40 · 1839 阅读 · 0 评论 -
Enum定义位域, 即可以通过位操作来产生未命名的值
通过FlagsAttribute可以实现。// A bit field or flag enumeration of harvesting seasons.[Flags]public enum Seasons{ None = 0, Summer = 1, Autumn = 2, Winter = 4, Spring = 8, All = Su原创 2013-07-10 15:43:51 · 1036 阅读 · 0 评论 -
使用SOS.dll调查内存泄露
1.用windbg或者VS加载SOS.dll, 可以参考我的另外一篇“如何用Visual Studio集成SOS.dll进行调试”2. (1)用GCHandleLeaks调查 具体示例如下:0:003> !gchandleleaks-------------------------------------------------------------------------------G原创 2015-03-04 13:13:54 · 1769 阅读 · 0 评论 -
从HttpRequestMessage的Content中同步读取Stream
代码如下:var sc = Request.Content; using (MemoryStream tempStream = new MemoryStream()) { sc.CopyToAsync(tempStream).Wait(); tempStrea原创 2015-07-07 22:42:13 · 6180 阅读 · 0 评论 -
WPF输入框Paste时出错,IDataObject的GetData抛出OutOfMemoryException
现象:客户在使用过程中,在输入框粘贴时,程序崩溃分析:从dump和log看到是:Insufficient memory to continue the execution of the program. at System.Runtime.InteropServices.ComTypes.IDataObject.GetData(FORMATETC& format, STGMEDIUM& med原创 2016-02-01 19:16:39 · 2249 阅读 · 0 评论 -
WPF毫秒级桌面时钟的实现-C#中Hook(钩子)的应用
最近由于项目中需要精确记录某些操作的发生时间,但又没有办法打日志,因此写了个小工具,用来记录当前的毫秒级本机时间。(程序内部实现了全局钩子,监听所有的键盘事件,即KeyDown,KeyUp事件。)工具功能如下:1.通过任意键盘按键来记录当前时间2.可以在列表处单击记录当前时间C#中对于Hook API的包装如下:using System;using System.Collections.Gener原创 2015-01-23 16:22:20 · 4038 阅读 · 0 评论 -
利用Task加载DICOM的Study,Series,Image的类
这个类主要是利用了Task建立了一个一个工作列表, /******************************************************************** created: 2013/01/21 created: 21:1:2013 16:34 author: Li JianGong原创 2013-07-10 15:43:42 · 2057 阅读 · 0 评论 -
依赖属性
Q:什么时候会用到DP?A:当你需要支持样式,数据绑定,动画, Blend设计器等Q:DP与CLR属性不同的关键点有?A:Static,GetValue/SetValue (DependencyObject), Dependency, 时间换空间Q:DP的值优先级是?A:属性系统强制转换>动画>本地值>触发器>Setter>继承>依赖属性元数据的默认值Q:DP的优势?A:继承,减少内存占用空间,变原创 2014-09-04 13:19:10 · 1220 阅读 · 0 评论 -
C#中如何获取其他进程的命令行参数 ( How to get other processes's command line argument )
Subject: C#中如何获取其他进程的命令行参数 ( How to get other processes's command line argument )From: jiangong.li_SWTo: dongpo.zhu_SWDate Sent: 12/29/2012 10:42:37 AM private static IEnumerablestring> GetCommandLine原创 2013-07-10 15:42:52 · 5270 阅读 · 1 评论 -
C# 性能总结
尽量使用using语句块和finally (实现IDisposable)尽量使用单个大程序集而不是多个小程序集 (使用NGen.exe)使用sealed关键字权衡虚函数使用弱引用原创 2013-07-10 15:45:18 · 946 阅读 · 0 评论 -
利用dynamic来提供动态方法的性能
前段时间做了一个worklist的项目,有部分是利用xml配置DICOM的tag,然后根据xml把DICOM的Dataset转为实体类,或者把实体类转为Dataset。当中主要应用了反射来调用Dataset的put方法, 但是发现性能很慢, 一个解析映射花了几百毫秒。解决办法:利用dynamic来替换反射:dynamic temp = new ExampleClass();temp.someMe原创 2013-07-10 15:44:35 · 1189 阅读 · 0 评论 -
C#如何立即回收内存
1.把对象赋值为null2.立即调用GC.Collect();注意:这个也只是强制垃圾回收器去回收,但具体什么时候执行不确定。 代码: class Test { ~Test() { Console.WriteLine("DeConstructor."); } } class Program原创 2013-07-10 15:43:31 · 2645 阅读 · 0 评论 -
MVVM 架构模式分析
原创 2013-07-10 15:43:29 · 840 阅读 · 0 评论 -
C#线程处理基本知识
章节:线程与线程处理讨论多线程的优缺点,并概括了可以创建线程或使用线程池线程的几种情形。托管线程中的异常描述不同版本 .NET Framework 的线程中的未经处理的异常的行为,尤其是导致应用程序终止时的行为。为多线程处理同步数据描述将用于多线程的同步类中的数据的策略。托管线程状态描述基本的线程状态,并解释如何检测一个线程是否在运行。前台和后台线程解释了前台和后台线程的区别。Microsoft原创 2013-07-10 15:43:20 · 734 阅读 · 0 评论 -
C# 线程同步
1.利用lock, 如:public class TestThreading{ private System.Object lockThis = new System.Object(); public void Process() { lock (lockThis) { // Access thread-sen原创 2013-07-10 15:43:17 · 789 阅读 · 0 评论 -
C# 深化基本概念
关于IDisposable的Dispose方法.Net中GC会自动回收托管资源, 对于非托管资源应该使用Dispose方法。 在使用Dispose方法时,应注意避免在Dispose内部中继续释放托管资源, 即防止Finalize方法被调用( SuppressFinalize)。结构不支持继承,可以实现接口。 结构不支持析构函数。 析构函数既没有修饰符,也没有参数。可以通过调用 Collec原创 2013-07-10 15:43:08 · 753 阅读 · 0 评论 -
DataGrid当列宽超出当前宽度时,没有数据也恒有滚动条
附件是DataGrid支持滚动条的文件。 具体使用如下:1)DataGrid使用控件模板Setter Property="Template" Value="{DynamicResource grdStudyListDataGridControlTemplate}">原创 2013-07-10 15:43:06 · 3128 阅读 · 0 评论 -
利用MEF实现插件机制(可根据输入类型来加载特定dll)
最近在做PACS的项目中想利用插件来加载各个不同的SCP的操作实现。比如Worklist的查询数据库,可以有多个实现。 比如MPPS的更新,也可以有多个实现。 为了统一弹性处理插件模块,增加了类型输入,用来只加载特定的服务的实现。 [InheritedExport(typeof(ISCPBase))] public interface ISCPBase { I原创 2013-07-10 15:43:03 · 1899 阅读 · 0 评论 -
利用正则表达式类解析SQL语句,达到Worklist兼容各个RIS数据库的目的
在做RIS的项目中遇到一个问题, 因为Worklist要兼容各个RIS数据库, 因此设计了目前这个架构。 1.xml文件来配置RIS数据库的数据源, 2.xml文件来存储关于查询/更新数据库的SQL语句, 其中参数/值输入可用用{x}来代替。 如{0}代表第一个参数3.xml来配置Worklist SCU的query的字段和数据库字段的映射, 可以用Tag ID或者Tag Name与数原创 2013-07-10 15:43:01 · 1684 阅读 · 2 评论 -
C# 序列化反序列化XML的帮助类
以下是一个包装的用于序列化反序列化XML和C# 对象的类。 public class XmlSerializeHelper { #region Serialize/Deserialize private static System.Xml.Serialization.XmlSerializer serializer; private static S原创 2013-07-10 15:41:39 · 942 阅读 · 0 评论 -
利用反射拿到并递归C#类中的各个字段名字及类型
以下方法实现了遍历一个class中所有的字段, 并且递归遍历sub class。 private StringBuilder _properties = new StringBuilder(); public MainView() { TraversalProperties(typeof(StudyInfoModel)); F原创 2013-07-10 15:41:37 · 3114 阅读 · 0 评论 -
XmlSerialize error: There was an error generating the XML document.
今天遇到一个很火的问题, 一个c#的class 序列化成xml后抛出异常, 信息为: XmlSerialize error: There was an error generating the XML document.然后看了下异常的内部原因, 是一个类型不匹配的问题, 把X转为Y的序列化。原创 2013-07-10 15:41:35 · 2076 阅读 · 0 评论 -
C# Linq 取得两个列表的交集
我们经常会用到linq 来查询 一个数组中和另一个数组中相同的项, 这个时候就会用到IEqualityComparer接口。public class StudyInfoModel{ public string InstanceUID = "";}public class StudyCompare : IEqualityComparerStudyInfoModel>原创 2013-07-10 15:41:08 · 2516 阅读 · 0 评论 -
C# 利用Xsd验证xml
最近做项目时,用到了xml的序列化与反序列化, 发现最好用xsd来验证xml, 因为反序列化xml不校验xsd。方法:xmlData变量为xml字符串MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(xmlData)); ms.Position = 0;原创 2013-07-10 15:44:33 · 2539 阅读 · 0 评论 -
C# 表达式树(Expression)
c#中有Expression,即表达式。通过Expression可以动态构造代码,并编译执行。 比如:1. 创建参数表达式 :ParameterExpression numParam = Expression.Parameter(typeof(int), "num");、创建常量表达式:ConstantExpression five = Expression.Constant(5, typeof原创 2013-07-10 15:44:37 · 5608 阅读 · 0 评论 -
c# namespace不能和class的name 相同
比如namespace A, 内部Class A, 那么调用class A的方法只能通过A.A.XXX来访问。或者说实例化一个class A, A a = new A(); // compile error A a = new A.A(); //Ok原创 2013-07-10 15:41:21 · 1791 阅读 · 0 评论 -
c# Linq Where 抛出异常 导致 程序崩溃
Collection was modified; enumeration operation may not execute” 这次项目中遇到一个问题, 就是C#程序随机崩溃, 抛出上面的异常。 经过debug后,发现原因是:c#的linq用Where关键字查询列表时,其他线程在操作此列表, 导致Where查询转换为Foreach时抛出异常。解决办法: 应该有个全局的信号量来负责同步对列表的操作。原创 2013-07-10 15:42:02 · 1289 阅读 · 0 评论 -
C#支持从自定义日期时间格式到DateTime类型
/// /// /// /// 20110122 /// private string ConverterRISDateToValidDate(string orignalData) { string result = ""; DateTime dtResult =原创 2013-07-10 15:40:50 · 2734 阅读 · 0 评论 -
TFS自定义开发中的反射应用
最近CM(Configuration Management) 的同事在自定义开发TFS的过程中遇到一个问题。领导要求快速开发一个工具, 可以自动连接TFS,然后自动Check out一些word文件, 然后程序修改后自动check in。(比如签名)这个实现的话,需要3个方面:1.根据现有TFS界面抽出可以使用的UI, 然后找到对应dll2.利用C#的反射, 获取到对应字段或者属性, 进行更改。原创 2013-07-10 15:45:35 · 1003 阅读 · 0 评论