Tag: C# 4.0

如何在System.IO.MemoryStream中使用GZipStream?

我对这个testing函数有一个问题,我在内存string中进行压缩,然后解压缩。 压缩效果很好,但我似乎无法得到解压缩工作。 //Compress System.IO.MemoryStream outStream = new System.IO.MemoryStream(); GZipStream tinyStream = new GZipStream(outStream, CompressionMode.Compress); mStream.Position = 0; mStream.CopyTo(tinyStream); //Decompress outStream.Position = 0; GZipStream bigStream = new GZipStream(outStream, CompressionMode.Decompress); System.IO.MemoryStream bigStreamOut = new System.IO.MemoryStream(); bigStream.CopyTo(bigStreamOut); //Results: //bigStreamOut.Length == 0 //outStream.Position == the end of the stream. 我相信bigStream out应该至less有数据,特别是如果我的源stream(outStream)正在被读取。 这是一个MSFT错误或我的?

潜在的.NET x86 JIT问题?

下面的代码在内置发行版模式(或优化debugging时)时运行方式不同,在没有附加Visual Studiodebugging器的情况下运行。 它也似乎只复制如果使用x86 JITter。 我已经在一台x86机器上testing了这一点,并在x64机器上的WOW64上运行(通过将平台目标设置为x86)。 我只用.NET 4.0试过。 在Release中debugging器外部运行时,看到: Value is 4 在debugging器内部运行时, WriteLine调用的e.Value.Length部分抛出NullReferenceException ,这是我期望发生的事情。 代码: namespace Test { class UsingReleasable<T> { public UsingReleasable(T obj) { m_obj = obj; } public T Release() { T tmp = m_obj; m_obj = default(T); return tmp; } public T Value { get { return m_obj; } } T m_obj; […]

为什么在generics类中重复嵌套types的字段声明会导致巨大的源代码增加?

场景是非常罕见的,但很简单:您定义了一个generics类,然后创build一个嵌套类,它从外部类inheritance,并在嵌套内定义一个关联字段(自我types)。 代码片段比描述更简单: class Outer<T> { class Inner : Outer<Inner> { Inner field; } } IL反编译后,C#代码如下所示: internal class Outer<T> { private class Inner : Outer<Outer<T>.Inner> { private Outer<Outer<T>.Inner>.Inner field; } } 这似乎是公平的,但是当你改变字段的types声明时,事情变得更加棘手。 所以当我更改字段声明 Inner.Inner field; 反编译之后,这个字段将如下所示: private Outer<Outer<Outer<T>.Inner>.Inner>.Inner field; 我明白,这个阶级的“嵌套”和inheritance不太相称,但是我们为什么要观察这样的行为呢? Inner.Inner types声明已经改变了types? Inner.Inner 和 Inner types在这种情况下有所不同? 当事情变得非常棘手 您可以在下面看到反编译的源代码 。 它真的很大,总共有12159个符号。 class X<A, B, C> { class […]

HttpClient与HttpWebRequest

我有一个大文件,我必须发送到一个web api客户端…数据是多部分。 问题是,如果文件是通过http web请求发送的,那么它会在webapi上快速上传。 对于这个请求,文件内容直接写在请求stream上。 就像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢。 我在Httpclient post async中使用multipartformdatacontent。 那么,对于大文件,我们是否只能使用Web请求? 还是有任何设置上的Httpclient,使上传更快?

如何从Parallel.ForEach收集返回值?

我正在调用一个缓慢的web服务并行。 事情很棒,直到我意识到我需要从服务中获得一些信息。 但是我不知道从哪里得到价值。 我不能写入数据库,HttpContext.Current似乎是一个使用Parallel.ForEach调用的方法 下面是一个示例程序(在你的脑海中,请想象一个缓慢的Web服务,而不是string连接) using System; using System.Threading.Tasks; class Program { static void Main(string[] args) { WordMaker m = new WordMaker(); m.MakeIt(); } public class WordMaker { public void MakeIt() { string[] words = { "ack", "ook" }; ParallelLoopResult result = Parallel.ForEach(words, word => AddB(word)); Console.WriteLine("Where did my results go?"); Console.ReadKey(); } public string […]

使用Json.Net将int转换为bool

我打电话给Web服务和返回的数据为bool字段是0或1但是与我的模型我正在使用System.Bool 使用Json.Net可以将0/1转换成我的模型的布尔值吗? 目前我收到一个错误 Newtonsoft.Json.JsonSerializationException:将值“0”转换为types“System.Boolean”时出错 任何帮助都是极好的!!

反向解释

首先,我已经阅读了关于协议和反变换的SO和博客的许多解释,并且非常感谢Eric Lippert在协变和逆变方面创作了这样一个系列。 然而,我有一个更具体的问题,我正试图让我的头稍微有点。 据我所知, 埃里克的解释是,协变和逆变都是描述转换的形容词。 协变变换是保持types顺序的变换,逆变换是逆转变换的变换。 我以这样的方式理解协变性,我认为大多数开发人员直观地理解。 //covariant operation Animal someAnimal = new Giraffe(); //assume returns Mammal, also covariant operation someAnimal = Mammal.GetSomeMammal(); 这里的返回操作是协变的,因为我们正在保持动物比哺乳动物或长颈鹿更大的尺寸。 在这一点上,大多数返回操作是协变的,逆变操作是没有意义的。 //if return operations were contravariant //the following would be illegal //as Mammal would need to be stored in something //equal to or less derived than Mammal //which would mean that […]

如何强制netwtonsoft json序列化程序将datetime属性序列化为string?

我正在使用Newtonsoft的Json时,我序列date时间属性我得到的JSON响应为: …"CreatedOn":"\/Date(1317303882420+0500)\/",… 我希望它在简单的string作为 …"createdOn": "2011-05-05 14:03:07", … 而我的类属性是DateTime,我如何强制将其作为string进行序列化,因为我们可以添加属性来将属性名称更改为 [JsonProperty("id")] public int ProductID { get; set; } 有没有类似的方式强制DateTime属性序列化为string?

对象到string数组

我试图将一个对象(在这里声明为'obj':对象是数组,原始)转换为一个string数组。 对象可以是任何东西uint [],int16 []等 我一直在尝试使用 string[] str = Array.ConvertAll<object, string>((object[])obj, Convert.ToString); 当我尝试将未知types的对象转换为object []时,就会出现这个问题。 我一直在铸造错误。 我做了一个失败的尝试 object[] arr = (object[])obj; 要么 IEnumerable<object> list = obj as IEnumerable<object> object[] arr = (object[])list; 我看到关于铸造的价值types和参考types问题的发布。 会有一个简单的代码,可以处理对象[],而不考虑types的对象,只要它是一个数组? 我试图避免每个可能的types铸造的手动处理。 提前致谢

Visual Studio 2010debugging不启动,F5或者点击“播放”不工作,什么都不做。 等待2-3分钟解决问题

我有一个相对简单的C#(框架4)控制台应用程序。 当我点击“播放”图标或点击F5 (即在debugging模式下启动程序)时,图标变成灰色一秒钟,然后回到绿色,但没有任何反应。 如果我等待2到3分钟,然后再试,debugging会话正常启动,中断点和一切。 我尝试过的东西没有成功: 清理解决scheme,然后重build。 重命名输出程序集。 重新启动Visual Studio。 唯一可行的就是等待。 我看不到任何相关的进程在2-3分钟内仍然运行(svchost,conhost,* .vshost或cmd)。