在C#中将字符串计算为属性

我有一个存储在字符串中的属性…说Object Foo有一个属性Bar ,所以要获取我将调用的Bar属性的值。 Console.Write(foo.Bar); 现在说我把”Bar”存储在一个字符串变量中…… string property = “Bar” Foo foo = new Foo(); 我如何使用property获取foo.Bar的值? 我是如何在PHP中使用它的 $property = “Bar”; $foo = new Foo(); echo $foo->{$property};

是否可以停止.NET垃圾回收?

程序员可以用C#编程语言以编程方式启动/停止垃圾收集吗? 例如,用于性能优化等。

如何使用LINQ计算与条件匹配的元素数

我尝试了很多东西,但对我来说最符合逻辑的是这个: int divisor = AllMyControls.Take(p => p.IsActiveUserControlChecked).Count(); AllMyControls是UserControls的集合,我想知道的是有多少UserControls将IsActiveUserControlChecked属性设置为true。 我在VS中得到的是: Cannot convert lambda expression to type ‘int’ because it is not a delegate type 我的表情怎么了?

使用WPF将WriteableBitmap保存到文件

我有: WriteableBitmap bmp; 我基本上想将它保存到磁盘上的文件中,如下所示: C:\bmp.png 我读了一些提到阅读的论坛: bmp.Pixels 然后将这些像素保存到Bitmap然后使用Bitmap.SaveImage()函数。 但是,我无法访问任何Pixels 。 我的WriteableBitmap显然没有任何名为Pixels属性。 我使用.NET Framework 4.0。

图形对象到图像文件

我想裁剪并调整我的图像大小。 这是我的代码: Image image = Image.FromFile(AppDomain.CurrentDomain.BaseDirectory + “Cropper/tests/castle.jpg”); // Crop and resize the image. Rectangle destination = new Rectangle(0, 0, 200, 120); Graphics graphic = Graphics.FromImage(image); graphic.DrawImage(image, destination, int.Parse(X1.Value), int.Parse(Y1.Value), int.Parse(Width.Value), int.Parse(Height.Value), GraphicsUnit.Pixel); 现在我假设我生成的裁剪/resize的图像存储在图形对象中。 问题是 – 如何将其保存到文件中?

使用WebClient或HttpClient下载文件?

我试图从URL下载文件,我必须在WebClient和HttpClient之间进行选择。 我在互联网上引用了这篇文章和其他几篇文章。 无处不在,由于其强大的异步支持和其他.Net 4.5权限,建议使用HttpClient。 但我仍然不完全相信并需要更多的投入。 我使用下面的代码从互联网上下载文件: Web客户端: WebClient client = new WebClient(); client.DownloadFile(downloadUrl, filePath); HttpClient的: using (HttpClient client = new HttpClient()) { using (HttpResponseMessage response = await client.GetAsync(url)) using (Stream streamToReadFrom = await response.Content.ReadAsStreamAsync()) { } } 从我的角度来看,我只能看到使用WebClient的一个缺点,那就是非异步调用,阻塞调用线程。 但是,如果我不担心阻塞线程或使用client.DownloadFileAsync()来利用异步支持,该怎么办? 另一方面,如果我使用HttpClient,是不是我将文件的每个字节加载到内存中然后将其写入本地文件? 如果文件太大,内存开销不会很贵吗? 如果我们使用WebClient可以避免这种情况,因为它将直接写入本地文件而不会消耗系统内存。 那么,如果性能是我的首要任务,我应该使用哪种方法进行下载? 如果我的上述假设是错误的,我想澄清一下,我也愿意接受替代方法。

entity frameworkSaveChanges()不更新数据库

var paymentAttempt = _auctionContext.PaymentAttempts.Where(o => o.Id == paymentAttemptId).SingleOrDefault(); if (paymentAttempt != null) { paymentAttempt.PaymentAttemptStatusId = (int)PaymentAttemptStatus.Defunct; paymentAttempt.PaymentAttemptStatus = _auctionContext.PaymentAttemptStatuses.Where(pas => pas.Id == paymentAttempt.PaymentAttemptStatusId).First(); var relevantWinningBidsTotalPrices = _auctionContext.GetWinningBidsTotalPricesForPaymentAttempt(paymentAttemptId).ToArray(); foreach (var winningBid in relevantWinningBidsTotalPrices) { winningBid.Locked = false; _auctionContext.UpdateObject(winningBid); } _auctionContext.SaveChanges(); } 在上面的代码之后 _auctionContext.SaveChanges(); 被称为winningBid按预期更新,但paymentAttempt不是。 为什么是这样? 真的很令人沮丧。 也没有错误。 如果像EF一样没有跟踪对象或类似的问题,我会发现无法发生,但是没有发生这样的错误。

如何在C#中查找类的大小

public class A { int x; float y; } 如何在C#中查找类的大小。 有没有像Sizeof()这样的运算符,它曾经是C ++

Process.WaitForExit在不同的机器上不一致

此代码在大量计算机上按预期运行。 但是在一台特定的机器上,对WaitForExit()的调用似乎被忽略了,实际上将该进程标记为已退出。 static void Main(string[] args) { Process proc = Process.Start(“notepad.exe”); Console.WriteLine(proc.HasExited); //Always False proc.WaitForExit(); //Blocks on all but one machines Console.WriteLine(proc.HasExited); //**See comment below Console.ReadLine(); } 请注意,与SO上的类似问题不同,被调用的进程是notepad.exe (出于测试原因),因此不太可能出现错误 – 即它不会产生第二个子进程并关闭。 即便如此,它也无法解释为什么它适用于所有其他机器。 在问题机器上,第二次调用Console.WriteLine(proc.HasExited))返回true即使在屏幕和任务管理器中记事本仍然清晰打开。 该机器运行的是Windows 7和.NET 4.0。 我的问题是; 该特定机器上的条件可能导致这种情况? 我应该检查什么? 编辑 – 到目前为止我尝试过的事情/更新/可能相关的信息: 重新安装.NET。 关闭任务管理器中我不知道的任何进程。 Windows尚未在此计算机上激活。 根据评论中的建议,我尝试使用GetProcessesByName获取“现有”进程ID,但这只是在问题机器上返回一个空数组。 因此,很难说即使使用WaitForExit也存在问题,因为即使在调用WaitForExit之前调用GetProcessesByName也不会返回该进程。 在问题机器上,生成的记事本进程的ParentID是代码手动启动的记事本进程的ID,换句话说,记事本正在生成子进程并终止自身。

内部控件上的“跨线程操作无效”exception

我一直在努力解决这个问题:我有一个function,旨在将控件添加到具有跨线程处理的面板,问题是虽然面板和控件在“InvokeRequired = false” – 我得到一个exception告诉我其中一个控件内部控件是从其创建的线程以外的线程访问的,该代码片段如下所示: public delegate void AddControlToPanelDlgt(Panel panel, Control ctrl); public void AddControlToPanel(Panel panel, Control ctrl) { if (panel.InvokeRequired) { panel.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl); return; } if (ctrl.InvokeRequired) { ctrl.Invoke(new AddControlToPanelDlgt(AddControlToPanel),panel,ctrl); return; } panel.Controls.Add(ctrl); //<– here is where the exception is raised } exception消息如下: “跨线程操作无效:控制’pnlFoo’从其创建的线程以外的线程访问” (’pnlFoo’在ctrl.Controls下) 如何将ctrl添加到面板?! 当代码到达“panel.Controls.Add(ctrl);”时 line – panel和ctrl“InvokeRequired”属性设置为false,问题是ctrl中的控件将“InvokeRequired”设置为true。 澄清事情:在基本线程上创建“panel”,在新线程上创建“ctrl”,因此,必须调用“panel”(导致“ctrl”再次需要调用)。 一旦完成两个调用,它就会到达panel.Controls.Add(ctrl)命令(“panel”和“ctrl”都不需要在这种状态下调用) 这是完整程序的一小部分: public […]