Tag: C#的

如何检测正在使用哪个.NET运行时(MS与Mono)?

我想知道在程序的执行过程中,它是使用Mono运行时还是Microsoft运行时执行的。 我目前使用下面的代码来确定我是否在MS CLR上: static bool IsMicrosoftCLR() { return RuntimeEnvironment.GetRuntimeDirectory().Contains("Microsoft"); } 但是,这有点依赖于运行时的安装文件夹,我不确定这是否适用于所有安装。 有没有更好的方法来检查当前的运行时间?

在C中切换string的最佳方法

在C中有一个switch结构,它可以根据testing的整数值执行不同的条件分支,例如: int a; /* Read the value of "a" from some source, eg user input */ switch ( a ) { case 100: // Code break; case 200: // Code break; default: // Code break; } 如何获得相同的行为(即避免所谓的“ if – else梯子”)为一个string值,即一个char * ?

如何使用给定的Type对象调用generics方法?

我想用给定的types对象调用generics方法。 void Foo(Type t) { MyGenericMethod<t>(); } 显然是行不通的。 我怎样才能使它工作?

强制XmlSerializer将“DateTime”序列化为“YYYY-MM-DD hh:mm:ss”

我有一个RESTful服务的XSD模式。 当与xsd.exe工具一起使用来生成C#代码时,XSD的xs:date生成以下代码: [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")] public System.DateTime time { get { return this.timeField; } set { this.timeField = value; } } 当使用XmlSerializer将XML反序列化为对象时,似乎都很好。 我面临的问题是,该服务预计date被格式化为YYYY-MM-DD hh:mm:ss和XSD生成的代码似乎只产生YYYY-MM-DD 。 如果我手动将XSD修改为xs:dateTimetypes,生成的C#代码将生成: 2010-08-20T20:07:03.915039Z 。 基本上,我如何强制序列化产生YYYY-MM-DD hh:mm:ss ? 有什么要做的XSD或有什么我可以做的改变生成的C#代码?

如何检查列表是否被sorting?

我正在做一些unit testing,我想知道是否有任何方法来testing列表是否由它包含的对象的属性sorting。 现在我正在这样做,但我不喜欢它,我想要一个更好的方法。 有人可以帮我吗? // (fill the list) List<StudyFeedItem> studyFeeds = Feeds.GetStudyFeeds(2120, DateTime.Today.AddDays(-200), 20); StudyFeedItem previous = studyFeeds.First(); foreach (StudyFeedItem item in studyFeeds) { if (item != previous) { Assert.IsTrue(previous.Date > item.Date); } previous = item; }

在#if中使用的未定义常量的值是多less?

我的预处理器似乎假设为了评估#if条件,未定义的常量是0。 这可以依赖,或做未定义的常量给未定义的行为?

JSON的C#自动属性反序列化

我需要将以JSON表示的一些JavaScript对象反序列化为适当的C#类。 鉴于自动属性的好处,我宁愿让他们在这些类,而不是只有字段。 不幸的是,.NET序列化引擎(至less在默认情况下)完全忽略了反序列化的自动属性,只关心后台字段,这在JavaScript对象中显然不存在。 鉴于没有标准的方式来命名支持字段 ,说实话,我甚至不想打扰“让我们创build一个看起来像它有C#支持领域的JavaScript对象”的方法,因为它听起来有点肮脏,唯一的方法我可以将JavaScript字段序列化为C#自动属性,如果我可以强制序列化引擎以某种方式忽略后台字段并直接使用该属性。 不幸的是,我无法弄清楚这是如何完成的,或者是否可以完成。 任何想法,将不胜感激。 编辑 :这里是一个例子: 使用Javascript: function Cat() { this.Name = "Whiskers"; this.Breed = "Tabby"; } var cat = new Cat(); 然后将其序列化为“{Name:'Whiskers'}”。 C#类: [Serializable()] public class Cat { public string Name { get; set; } public string Breed { get; set; } } 而反序列化代码,失败了: new DataContractJsonSerializer(typeof(Cat)).ReadObject(inputStream); 从例外情况看,它显然是因为它正在寻找支持领域而失败。 编辑2 :这是例外,如果有帮助(没有内部例外): System.Runtime.Serialization.SerializationException “数据协定types”Test.Cat“不能被反序列化,因为找不到所需的数据成员<Name>k__BackingField, […]

如何使用reflection访问内部类

我如何访问程序集的内部类? 说我想访问System.ComponentModel.Design.DesignerHost。 这里的DesignerHost是一个内部密封的类。 我如何编写一个代码来加载程序集和types?

int.TryParse如何实际工作

我找了int.TryParse方法的实现,它是如何工作的,但我没有find。 我必须知道,关于一个string,它是否是一个数字值,但我不想在此时进行转换。 所以我只需要int.TryParse的bool结果。 所以问题是: 有什么function只能提供bool结果, 和 我想知道, int.TryParse实际上是如何工作的(是否有一个try … catch里面或迭代inputstring的字符)?

传递一个空数组作为可选参数的默认值

如何定义一个函数,将一个空数组的可选数组作为默认值? public void DoSomething(int index, ushort[] array = new ushort[] {}, bool thirdParam = true) 结果是: “数组”的默认参数值必须是编译时常量。