使用空赋值修复“使用未分配的局部变量”。 为什么?

使用这样的一段代码,编译器在c.MyProperty上c.MyProperty : MyClass c; try { throw new Exception(); } catch (Exception) { } c.MyProperty = 2; // “Use of unassigned local variable ‘c'”. 但是,如果在初始化中为c分配null ,则不会抱怨: MyClass c = null; try { throw new Exception(); } catch (Exception) { } c.MyProperty = 2; // no complains this time. 那么,为什么这有效呢? 如果c没有赋值为null并且编译器假设允许它,那么不会在c.MyProperty抛出相同的exception, 对象引用没有设置为对象的实例吗?

无法理解异步并等待

我一直在尝试理解as#/ await和C#中的任务,但是尽管观看了YouTubevideo,阅读文档和遵循复数课程,但仍然失败了。 我希望有人能够帮助回答这些略微抽象的问题,以帮助我的大脑。 1.为什么他们说async / await在它自己的async关键字什么都不做而且await关键字添加一个暂停点时启用’asynchonrous’方法? 没有添加一个暂停点,强制该方法同步动作,即在继续之前完成await标记的任务。 2.显然除了事件处理程序之外你不应该使用async void,那么你如何正常调用异步方法呢? 似乎为了使用await关键字调用异步方法,调用它本身的方法/类需要标记为async。 我见过的所有例子都“启动”了一个带有事件处理程序的异步void方法。 你将如何“逃避”async / await的包装以运行该方法? 3。 public async Task SaveScreenshot(string filename, IWebDriver driver) { var screenshot = driver.TakeScreenshot(); await Task.Run(() => { Thread.Sleep(2000); screenshot.SaveAsFile(filename, ScreenshotImageFormat.Bmp); Console.WriteLine(“Screenshot saved”); }); Console.WriteLine(“End of method”); } 回到1.这看起来像一个同步方法。 当它到达Task.Run时执行暂停,因此Console.WriteLine(“End of method”); 在任务完成之前不会执行。 也许整个方法本身将在代码中触发它时异步执行? 但回到2,你需要等待调用它,否则你得到消息’因为没有等待这个调用..’因此添加await将导致该执行点同步等等。 任何帮助理解这一点将非常感激。

实现一个高效的算法来找到两个字符串的交集

实现一个算法,该算法将两个字符串作为输入,并返回两者的交集,每个字母最多表示一次。 Algo :(考虑使用的语言将是c#) 将两个字符串转换为char数组 获取较小的数组并为其生成哈希表,其中键为字符,值为0 现在循环遍历另一个数组,并在散列表中增加计数(如果该字符存在于其中)。 现在取出值为> 0的哈希表的所有char。 这些是交叉值。 这是一个O(n)解决方案,但使用额外的空间,2个char数组和一个哈希表 你能想到比这更好的解决方案吗?

用于Windows 8 Metro-UI的控件样式和模板

我遇到了一些关于我的C#/ XAML Metro-UI应用程序的视觉外观的问题。 我想自定义默认模板。 对于其他类型的应用程序,我可以从MSDN文章中获取默认样式和控件。 例如: 控制WPF的样式和模板 控制Silverlight的样式和模板 在哪里可以找到类似于Metro-UI默认样式和模板的内容? 我知道可以在Expression Blend中提取模板或样式。 但是我在下一个post中描述了我的Blend for Visual Studio 11的问题。

在C#中发送TCP数据包

我想在C#中发送TCP数据包(带有自定义标头)。 建立这样的数据包是没有问题的,我有一个字节数组的数据。 但是如何通过套接字发送此数据包? 我试过这样的事情: using (Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP)) { TcpPacket tcpPacket = new TcpPacket(); // fill tcpPacket with data sock.Bind(new IPEndPoint(MYADDRESS, MYPORT)); byte[] data = tcpPacket.GetBytes(); sock.SendTo(data, new IPEndPoint(DESTADDRESS, DESTPORT)); } 这没有任何例外,但是嗅探网络显示没有任何内容发送。 解决办法是什么? 我使用的是Windows 7 Professional,我不希望系统单独创建完整的TCP连接。 PS:我不想使用其他一些库。 PS:构建IP数据包也不是问题。

使用Async / Await时的WPF ProgressBar用法

我有一个非常简单的任务,加载一些数据,如下所示: async Task<List> GetInvoices() { var invoices = await Task.Run(() => db.Invoices.AsNoTracking().ToList()); return invoices; } 使用进度条的最佳方法是什么? 我不需要加载百分比(尽管这会很有用),我只需要在加载数据的开始和结束时显示/隐藏进度条。 有没有办法创建一个完成或完成的方法? 我是非常新的异步/等待所以小孩手套请!

在两个不同的代码块使用相同的锁对象?

我可以在两种方法中使用相同的锁对象,由两个不同的线程访问吗? 目标是使task1和task2线程安全。 object lockObject = new object(); // Thread 1 void Method1() { lock(lockObject) { // task1 } } // Thread 2 void Method2() { lock(lockObject) { // task2 } }

解析包含TimeZone信息的字符串DateTime

我试图将字符串值转换为日期时间值,但我收到System.FormatException错误。 这是因为时区信息是日期字符串的一部分。 有没有能够处理这种转换的方法? string date = “Wed, 04 Jan 2012 20:18:00 EST”; DateTime dt = Convert.ToDateTime(date); Console.WriteLine(dt.ToString());

如何在C#(IGMPv3)中加入源特定组播组

我们有一个C#应用程序,可以加入和接收来自多播组的数据。 这很好用。 我们现在想要支持IGMPv3并且能够在加入多播组时指定源的IP。 从MSDN文档中,我看不到如何执行此操作。 我发现以下链接似乎回答了我的问题。 http://social.msdn.microsoft.com/Forums/en/netfxnetcom/thread/e8063f6d-22f5-445e-a00c-bf46b46c1561 这是我如何实现这个: byte[] membershipAddresses = new byte[12]; // 3 IPs * 4 bytes (IPv4) Buffer.BlockCopy(multicastIp.GetAddressBytes(), 0, membershipAddresses, 0, 4); Buffer.BlockCopy(sourceIp.GetAddressBytes(), 0, membershipAddresses, 4, 4); Buffer.BlockCopy(localIp.GetAddressBytes(), 0, membershipAddresses, 8, 4); socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, membershipAddresses); 但是在使用此错误调用SetSocketOption()时出现SocketException: The requested address is not valid in its context 。 有人能指出我在这里做错了吗? 谢谢!

为什么我没有收到关于未初始化的只读字段的警告?

如果您忘记初始化私有或内部的只读成员,或者声明它的类是内部的,那么C#编译器就足以为您提供“永远不会分配字段”警告。 但是,如果该类是公开的,并且只读成员是公共的,受保护的或内部保护的,那么就没有警告! 有谁知道为什么? 示例代码,用于说明发出警告的条件以及未发出警告的条件: namespace Test1 { class Test1 { #if TRY_IT public readonly int m; //OK: warning CS0649: Field is never assigned to, and will always have its default value 0 protected readonly int n; //OK: warning CS0649: Field is never assigned to, and will always have its default value 0 internal readonly int […]