我将简化代码以节省空间,但所呈现的内容确实说明了核心问题。 我有一个类是有一个属性是一个基types。 有3个派生类可以分配给该属性。 如果我将任何派生类分配给容器并试图序列化容器,则XmlSerializer将引发可怕的: “typesx不是预期的,使用XmlInclude或SoapInclude属性指定静态未知的types。 然而,我的基类已经用该属性装饰,所以我认为必须有一个额外的“隐藏”的要求。 真奇怪的是,默认的WCF序列化程序对这个类层次结构没有任何问题。 Container类 [DataContract] [XmlRoot(ElementName = "TRANSACTION", Namespace = Constants.Namespace)] public class PaymentSummaryRequest : CommandRequest { [DataMember] public PaymentSummary Summary { get; set; } public PaymentSummaryRequest() { Mechanism = CommandMechanism.PaymentSummary; } } 基类 [DataContract] [XmlInclude(typeof(xPaymentSummary))] [XmlInclude(typeof(yPaymentSummary))] [XmlInclude(typeof(zPaymentSummary))] [KnownType(typeof(xPaymentSummary))] [KnownType(typeof(yPaymentSummary))] [KnownType(typeof(zPaymentSummary))] public abstract class PaymentSummary { } 派生类之一 [DataContract] public class […]
当使用具有枚举属性的类时,通常会在属性名称和枚举types之间产生命名冲突。 例: enum Day{ Monday, Tuesday, … } class MyDateClass { private Day day; public Day Day{ get{ return day; } } } 由于只有标志枚举应该有复数名称,命名枚举“天”不是一个非标志枚举的方式。 在上面的例子中,你可以使用一些像“WeekDay”这样的变体来枚举或者属性。 但在一般情况下,没有像这样的好的变体,所以你最终使用像“FooMode”或“BarKind”的属性,具有Foo和Bartypes的枚举属性的对象。 不那么优雅。 在这种情况下,你通常如何命名枚举和属性? 感谢您的快速回复。 另一个问题:为什么不build议嵌套公共枚举,如果要嵌套公共枚举,如何解决命名问题? class Vehicle { enum Kind{ Car, Bike } public Kind Kind{ get{ return … } } } class Meal { enum Kind{ Dessert, MainCourse } […]
我创build了ac#应用程序,占用了150MB的内存(专用字节),主要是由于一个大字典: Dictionary<string, int> Txns = new Dictionary<string, int>(); 我想知道如何释放这个内存。 我试过这个: Txns = null; GC.Collect(); 但是,我的私人字节似乎并没有太大的影响 – 从155mb降到145mb。 任何线索? 谢谢 -编辑- 好吧,我有这个代码更多的运气(它获得私人字节下降到50MB),但为什么? Txns.Clear(); // <- makes all the difference Txns = null; GC.Collect(); -编辑- 对于那些说'不要使用GC.collect'的人来说,没关系(我不打算讨论这个问题,除了说你可以看到我的C背景通过),但是它并没有真正回答我的问题:为什么垃圾收集器只有在清除事务列表时才释放内存? 不pipe怎样,它不应该释放内存,因为字典已经取消了?
如果我有一个方法中的代码块(使用.NET 4和任务并行库): var task = new Task(() => DoSomethingLongRunning()); task.Start(); 方法返回,这个任务是否会超出范围,被垃圾收集,还是会运行完成? 我还没有注意到GCing的任何问题,但是要确保我不会为GC的竞争状态而设置自己。
目的 对一组显示货币数据的stringsorting,例如$1,995.94数字forms显示在一组数据中。 码 我正在使用下面的代码示例将string值转换为decimal以便我可以正确地sorting。 if (sortBy == "checkAmount") { StringBuilder sb = new StringBuilder(); foreach (var c in Convert.ToString(p.GetType().GetProperty(sortBy).GetValue(p, null))) { if (!char.IsDigit(c) && c != '.') { continue; } sb.Append(c); } return Convert.ToDecimal(sb.ToString()); } else { return p.GetType().GetProperty(sortBy).GetValue(p, null); } 问题 什么是更好的方法呢? 它工作,这很酷,但它不是很优雅。 最终解决scheme Servy提供的答案按预期工作 ,我用了一段时间的实施,但一个同事,我发现一个更好的方式,所以我在这里logging。 顺便说一句,我最终使用这个解决scheme。 decimal.Parse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.Number);
我试图理解这部分语言背后的devise决定。 我承认我对这一切都很陌生,但是这是最初抓到我的东西,我想知道如果我错过了一个明显的原因。 考虑下面的代码: List<int> MyList = new List<int>() { 5, 4, 3, 2, 1 }; int[] MyArray = {5,4,3,2,1}; //Sort the list MyList.Sort(); //This was an instance method //Sort the Array Array.Sort(MyArray); //This was a static method 为什么它们不是以同样的方式实现的 – 直观地看,如果它们都是实例方法,那么它们会更有意义。
我有兴趣知道谁使用JScript.Net和什么样的应用程序。 每当我阅读MSDN .Net文档时,我总是注意到JScript示例,但多年来我一直是一个C#开发人员,我从来没有真正知道任何人使用它。 人们使用这种应用程序的是什么types的应用程序,以及如何在灵活性,function和一般用法方面测量C#? [ 编辑:只是为了澄清 – 我不问什么JScript.Net 是什么,我问什么人实际使用它 – 即有兴趣知道实际的使用情况,以及人们如何发现它的工作]
编译或试图在Windows 7 64位上运行我的应用程序时收到以下错误消息。 我search了互联网,很多人都有相同的错误信息。 但是,这些解决scheme都不能解决我的问题或情况。 我正在使用Visual Studio 2010 。 错误信息 错误38无法加载文件或程序集“file:/// D:/ Projects / Windows Projects / Weld / Components / FileAttachments / FileAttachments / FileAttachments / bin / x86 / Debug / FileAttaching.dll”或其某个依赖项。 试图加载格式不正确的程序。 行1212,位置5. D:\ Projects \ Windows Projects \ Weld \ Weld \ Weld.UI \ frmMain.resx 1212 5 Weld.UI 描述 好的,所以我有两个项目,一个UI项目和一个FileAttachment项目。 UI项目具有对FileAttachment项目的引用。 […]
我想知道在处理multithreading时如何以正确的方式使用TransactionScope类? 我们在主线程中创build一个新的范围,然后产生一对工作线程,我们希望这些线程参与主范围,例如,如果范围从未完成,那么每个工作者都会调用回滚。 我使用内部的ThreadStaticAttribute读取了一些有关TransactionScope的内容,这使得上述不可能/非常困难 – 有人可以validation任何一种方式吗? 如果我们以同步方式运行代码,则回滚工作,即内部事务能够参与主事务,但是如果我们切换到线程执行,则不能。 谢谢
无法在Windows Vista Business中testing从.NET代码发送电子邮件。 我正在编写代码,一旦certificate它将转移到SSIS包。 代码是通过电子邮件发送一个错误消息到收件人列表。 代码如下,但是当我执行代码时,我得到一个exception。 我创build了一个简单的类来完成邮件…devise可能会更好,我在实现更强大的function,方法等之前正在testingfunction。 namespace LabDemos { class Program { static void Main(string[] args) { Mailer m = new Mailer(); m.test(); } } } namespace LabDemos { class MyMailer { List<string> _to = new List<string>(); List<string> _cc = new List<string>(); List<string> _bcc = new List<string>(); String _msgFrom = ""; String _msgSubject = […]