Tag: c# 4.0

为什么Stack Trace显示我的开发文件路径?

Visual Studio 2010 SP1,已编译的WCF应用程序,将其放在服务器上,当然它在第一次运行时出现错误(有什么新内容),将堆栈跟踪输出到日志文件。 它正在看到我的开发环境的路径。 为什么? 是因为我将它部署为Debug与Release相比还是还有别的东西,或者我是否应该更谨慎地输出Stack Traces呢? 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.Logging.LogMessageToFile(String msg, Boolean isUsingClickOnceApp) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\Logging.cs:line 63 at App1.App1Main.ConnectWebService(String description) in C:\Users\robcube\Documents\Visual Studio 2010\Projects\AppWebService\App1\International.cs:line 40 04/09/2012 03:58:46: Error: Object reference not set to an instance of an object. at App1.App1Main.UpdateActivityLog(String data, […]

.NET 4.0和C#4.0中的事件和委托逆转

在调查这个问题时,我对C#4.0中新的协方差/逆变特性将如何影响它感到好奇。 在Beta 1中,C#似乎不同意CLR。 回到C#3.0,如果你有: public event EventHandler Click; ……然后你在其他地方: button.Click += new EventHandler(button_Click); …编译器会barf因为它们是不兼容的委托类型。 但是在C#4.0中,它编译得很好,因为在CLR 4.0中,类型参数现在标记为in ,因此它是逆变的,因此编译器假定多播委托+=将起作用。 这是我的测试: public class ClickEventArgs : EventArgs { } public class Button { public event EventHandler Click; public void MouseDown() { Click(this, new ClickEventArgs()); } } class Program { static void Main(string[] args) { Button button = new Button(); […]

当用作generics类型参数时,为什么“动态”不是所有类型的协变和逆变?

我想知道当用作generics类型参数时, dynamic是否在语义上等同于object 。 如果是这样,我很好奇为什么存在这种限制,因为在为变量或forms参数赋值时两者是不同的。 我在C#4.0中编写了一个小实验来梳理一些细节。 我定义了一些简单的接口和实现: interface ICovariance { T Method(); } interface IContravariance { void Method(T argument); } class Covariance : ICovariance { public T Method() { return default(T); } } class Contravariance : IContravariance { public void Method(T argument) { } } 实验的有趣细节: class Variance { static void Example() { ICovariance c1 = […]

在应用程序中编译C#代码

我想要一些代码来编译我的TextBox中的代码(例如)。 我的意思是我想在运行程序后编译代码。 我怎样才能做到这一点?

wcf条件压缩

我最近插入了一个自定义编码器(使用二进制编码器进行实际编码,使用Gzip压缩器来压缩字节数组)。 它工作正常。 现在的问题是对于小的消息大小,它实际上膨胀了字节数组。 我想知道是否有办法避免这种情况。 特别是如果有办法我可以应用条件压缩和解压缩。 我确实尝试过这样的事情 – 放置一个条件 if(buffer.Count <= 5000) skip compression 但问题是另一方面即使字节未被压缩也会发生解压缩。 我希望这是有道理的。 以下是压缩和解压缩发生的函数(来自CompactMessageEncoder的代码片段) public override Message ReadMessage(ArraySegment buffer, BufferManager bufferManager, string contentType) { ArraySegment decompressedBuffer = DecompressBuffer(buffer, bufferManager); LogWrite(“Decompressed from {0} bytes to {1} bytes”, buffer.Count, decompressedBuffer.Count); Message returnMessage = _innerEncoder.ReadMessage(decompressedBuffer, bufferManager); returnMessage.Properties.Encoder = this; return returnMessage; } public override ArraySegment WriteMessage(Message […]

如何在C#中声明一个void指针

我们如何在C#中声明一个void指针?

填充无效且无法删除使用“AesManaged”C#解密字符串时出现exception

请建议我在哪里需要更新/重构代码以摆脱exception。 我尝试使用以下代码解密加密字符串时出现exception。 以下行抛出exception using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { // Read the decrypted bytes from the decrypting stream // and place them in a string. plaintext = srDecrypt.ReadToEnd(); } public string EncryptAuthenticationTokenAes(string plainText) { byte[] encrypted; // Create an AesManaged object // with the specified key and IV. using (AesManaged aesAlg = new AesManaged()) […]

为什么Windows服务中的打印屏幕返回黑色图像?

protected override void OnStart(string[] args) { base.OnStart(args); CaptureScreen(); } protected override void OnStop() { base.OnStop(); } private void CaptureScreen() { Bitmap printscreen = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics graphics = Graphics.FromImage(printscreen as Image); graphics.CopyFromScreen(0, 0, 0, 0, printscreen.Size); printscreen.Save(@”L:\” + Counter++ + “.jpg”, ImageFormat.Jpeg); } 我检查过与桌面交互 尝试了localService帐户和用户

为什么我(有时)必须引用我引用的程序集引用的程序集?

我有一个程序集A,它定义了一些带有一些重载的接口: public interface ITransform { Point InverseTransform(Point point); Rect InverseTransform(Rect value); System.Drawing.Point InverseTransform(System.Drawing.Point point); } …以及引用A(二进制文件而不是项目)的程序集B并调用其中一个重载: var transform = (other.Source.TransformToDisplay != null && other.Source.TransformToDisplay.Valid) ? other.Source.TransformToDisplay : null; if (transform != null) { e.Location = transform.InverseTransform(e.Location); } 确切地说,它调用InverseTransform方法的System.Windows.Point重载,因为这是e属性Location的类型。 但是当我在IDE中构建B时,我得到: 错误CS0012:类型’System.Drawing.Point’在未引用的程序集中定义。 您必须添加对程序集’System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a’的引用。 即使这甚至不是我所说的过载。 当我注释掉调用重载方法InverseTransform ,即使我仍在实例化ITransform类型的对象,它也能正常构建。 为什么? 有没有办法解决这个问题,而无需在任何地方添加对System.Drawing的引用?

如何使用Reflections将DataTable转换为List

我有一个类的通用列表,我使用Reflection和扩展方法自动将其转换为DataTable。现在我想反向进行。我想将DataTable转换为List.Better说我想要帮助写一个方法期望一个DataTable和一个Type并根据列名自动查找该类型(类)的属性,并为该Type(类)的对象赋值。就像这个psodu代码: private List ConvertToList(DataTable dt) { List AllColumns = // Get All Column Names of a DataTable for(int i=0;i<dt.Rows.Count;i++) { foreach(var item in AllColumns ) { //Get Property According To **ITEM** //Get Data Of Rows[i][item] and assign it to T.property } } } 我怎么能这样做? 编辑1) 我用@Cuong Le的回答是这样的: var properties = typeof(CustomType).GetProperties().ToList(); List list = ConvertToList(dt, […]