Tag: .net

从C#将表类型对象作为输入参数传递给Oracle中的存储过程

我有接受表类型作为输入参数的存储过程。 如何从c#代码传递对象? create or replace TYPE CUSTOM_TYPE AS OBJECT ( attribute1 VARCHAR(10), attribute2 VARCHAR(10) ); create or replace TYPE CUSTOM_TYPE_ARRAY AS TABLE OF CUSTOM_TYPE; PROCEDURE SP_TEST ( P_TABLE_IN IN CUSTOM_TYPE_ARRAY, P_RESULT_OUT OUT SYS_REFCURSOR ) AS BEGIN OPEN P_RESULT_OUT FOR SELECT ti.attribute1, ti.attribute2, ti.attribute3 FROM TABLE(P_TABLE_IN) ea inner join MYTABLE ti on ea.attribute1 = ti.attribute1 and […]

使用OnDeserializing和OnDeserialized进行.NET反序列化

我使用了一个可序列化的简单类。 它有一个反序列化的构造函数: protected MyClass(SerializationInfo info, StreamingContext context) 和一个用于序列化的GetObjectData方法。 它工作正常。 现在我添加了两种方法来监视反序列化: [OnDeserializing()] internal void OnDeserializingMethod(StreamingContext context) { System.Diagnostics.Trace.WriteLine(“OnDeserializingMethod: ” + this.GetType().ToString()); } [OnDeserialized()] internal void OnDeserializedMethod(StreamingContext context) { System.Diagnostics.Trace.WriteLine(“OnDeserializedMethod: ” + this.GetType().ToString()); } 并且想知道这些方法的调用顺序。 现在,在调用构造函数之前调用这两个方法。 这怎么可能,为什么在调用(反序列化)构造函数后调用的“OnDeserialized”方法不被调用? 如何在执行任何构造函数之前调用(非静态)方法? (我正在使用BinaryFormatter)

Windows窗体通用inheritance

我有这些课程: class Foo : Form where T1, T2 : EventArgs class MiddleGoo : Foo class Goo : MiddleGoo X,Y只是从EventArgs派生的简单类。 我在设计师中看到Goo,但我想在Foo和Goo之间创建一个类Boo,如下所示: class Boo : Foo where T1 : EventArgs class MiddleGoo : Boo class Goo : MiddleGoo 中产阶级的解决方法不起作用,任何想法? 编辑:我的意思是Y和X是像YEventArgs和XEventArgs这样的类,我的问题是当我将Y定义为T2但仍希望通过T1保持通用时,在设计器类Boo中查看。 EDIT2:我刚刚意识到我拼错了Y级的东西…… public class Foo : Form where T1 : EventArgs where T2 : EventArgs { } public […]

我如何对一系列结构进行排序?

我有一个包含歌曲数据的结构: public struct uLib { public string Path; public string Artist; public string Title; public string Album; public string Length; } 我的库包含一个这个uLib的数组。 我怎么用艺术家对这个数组进行排序? 有没有我可以在这种类型的数组上调用的本机排序函数,还是我必须“自己滚动”?

为什么Http请求Fiddler的速度非常快

我在c#中编写了一个用于抓取网站的multithreading程序,但当我在后台启动Fiddler时,请求的速度提高了12倍,这对我来说真的很奇怪,当我关闭Fiddler时,下载速度会降低。 怎么可能请帮助,(我的连接到ineternet和Fiddler也没有代理设置)如果我可以在我的应用程序中注入fiddler的性能,那将是非常好的,任何解决方案? 幕后有什么魔力吗? 🙂 谢谢

从WCF服务返回的JSON数据包含转义字符

我有一个工作的WCF – WPF应用程序工作,但我正在寻找一些优化。 下面是我的代码,其中WCF restful服务公开JSON数组,并且WPF UI正在接收它而没有任何问题。 WCF: public clsStatus[] GetAllStatus() { DataTable dt = new DataTable(); List lstGetAllStatus = new List(); try { dt = // My Data Table foreach (DataRow dr in dt.Rows) { dcStatus objGetAllStatus = new clsStatus(); objGetAllStatus.Id = Convert.ToInt32(dr[“Id”]); objGetAllStatus.Status = dr[“Status”].ToString(); lstGetAllStatus.Add(objGetAllStatus); } } return lstGetAllStatus.ToArray(); } 在WPF UI中: public […]

在IDisposable类层次结构中正确处理ObjectDisposedException

正确实现IDisposable时,大多数实现(包括框架指南)都建议包含一个private bool disposed; 成员为了安全地允许多次调用Dispose() , Dispose(bool)以及在适当时抛出ObjectDisposedException 。 这适用于单个类。 但是,当您从可支配资源中inheritance子类,并且子类包含其自己的本机资源和独特方法时,事情会变得有点棘手。 大多数示例都展示了如何正确地重写Dipose(bool disposing) ,但不要超越它来处理ObjectDisposedException 。 在这种情况下,我有两个问题。 第一: 子类和基类都需要能够跟踪处置状态。 我知道有几个主要选项 – 1)声明私人布尔处置; 在这两个class级。 每个类跟踪它自己的this.disposed,并根据需要抛出。 2)使用protected bool Disposed {get; 私人集; 而不是一个字段。 这会让子类检查处理状态。 3)提供一些受保护的辅助方法来检查处理状态,如果对象被处理则通过reflection拉动当前类型名称来抛出。 我看到每个选项的优点是: 1)这“气味”给我,因为它包含重复的布尔值,但似乎工作正常。 我经常在子类化其他代码时使用它。 2)这取出了重复的布尔值,但不是设计指南书的编写方式等。这是我通常使用的,因为它使状态保持单点。 3)这对我来说似乎是最干净的选择,但没有出现在标准指南中。 对于一种方法而言,它可能比该类用户的其他方式要少一些。 在某些方面,我尝试过使用这三种方法。 我想知道这三种方法的优点和缺点,以及任何其他想法,以更清洁,更好的方式来处理这个问题。 你在处理这个问题时会做出什么选择?为什么? 第二: 抛出ObjectDisposedException ,您对name参数使用了什么? 我知道“典型”的方法调用是: throw new ObjectDisposedException(GetType().FullName); Microsoft员工在此页面上发表评论,建议实施具体类的全名是适当的用法。 在上面的第三个选项中,这将是唯一有意义的选择。 但是,如果类实现了throw本身,则可能会返回定义所调用方法的类的名称。 (即:基类可以返回基类的名称,而不是具体的子类) 我认为这不是一个好主意 – 但我在其他人编写的代码上遇到了这个问题。 使用实现方法的类的名称返回是有优点还是缺点?

拆分CSV并在元素中排除逗号

我有一个CSV字符串,我想把它分成一个数组。 但是,CSV是字符串和数字的混合,其中字符串用引号括起来,可能包含逗号。 例如,我可能有如下CSV: 1,”Hello”,2,”World”,3,”Hello, World” 我希望它能将字符串拆分为: 1 “Hello” 2 “World” 3 “Hello, World” 如果我使用String.Split(‘,’); 我明白了: 1 “Hello” 2 “World” 3 “Hello World” 有这么简单的方法吗? 已经编写的库或者我必须按字符解析字符串吗?

C#默认参数

对于某人来说,这可能是一个非常简单的答案。 我有一个带有Optional Parameter的方法,如此; public static Email From(string emailAddress, string name = “”) { var email = new Email(); email.Message.From = new MailAddress(emailAddress, name); return email; } 现在,我必须以.Net 3.5为目标,我的理解是Optional Parameters是.Net 4的一部分。但是,我的项目构建并且我仔细检查了属性 – 应用程序页面,其中3.5表示目标框架。 然后我在MSDN上发现了一篇文章,说它是VS2010中C#4的一个特性。 ( MSDN文章 – > 命名和可选参数 ) 有人可以帮我澄清一下。 C#4不需要.Net4? 什么是可选参数实际上是一部分? 谢谢。

DateTime仅以日期为基础的天数差异

我需要找出两个日期之间的天数差异。 例如: 输入: **startDate** = 12-31-2012 23hr:59mn:00sec, **endDate** = 01-01-2013 00hr:15mn:00sec 预期产量: 1 我尝试了以下方法: (dt1-dt2).TotalDays并转换为整数,但没有给我适当的答案,因为double必须转换为int – 尝试过Math.Ceiling,Convert.To … dt1.day – dt2.day都不起作用 dt.Substract()与上面提到的选项1具有相同的输出。 以上都没有,所以我最终编写了以下代码。 代码运行良好,但我觉得必须有一个只有几行代码的解决方案。 public static int GetDifferenceInDaysX(this DateTime startDate, DateTime endDate) { //Initializing with 0 as default return value int difference = 0; //If either of the dates are not set then return 0 […]