Questions tagged «c#-4.0»

C#4.0引入了诸如动态对象,COM互操作性改进,通用协方差和反方差,可选参数和命名参数之类的功能。如果您的问题专门与C#4.0特定功能有关,请使用此标记。如果您的问题并非特定于C#4.0功能,则应使用C#标记。

7
如何检查字符串值是否在Enum列表中?
在我的查询字符串中,我有一个age变量 ?age=New_Born。 有没有一种方法可以检查此字符串值New_Born是否在我的枚举列表中 [Flags] public enum Age { New_Born = 1, Toddler = 2, Preschool = 4, Kindergarten = 8 } 我现在可以使用if语句,但是如果我的Enum列表变大。我想找到一种更好的方法。我正在考虑使用Linq,只是不确定如何去做。
91 c#  c#-4.0  c#-3.0 

8
无法将String.Empty用作可选参数的默认值
我正在阅读Bill Wagner撰写的Effective C#。在第14项-最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例: public MyClass(int initialCount = 0, string name = "") 请注意,他使用""代替string.Empty。 他评论: 您会注意到[在上面的示例中]第二个构造函数在name参数上为默认值指定了“” ,而不是更习惯的string.Empty。那是因为string.Empty不是编译时常量。它是在字符串类中定义的静态属性。因为它不是编译常量,所以不能将其用作参数的默认值。 如果我们不能string.Empty在所有情况下都使用静态,那这是否会破坏其目的?我认为我们将使用它来确保我们有一种独立于系统的方式来引用空字符串。我的理解错了吗?谢谢。 更新 只是后续评论。根据MSDN: 每个可选参数都有一个默认值作为其定义的一部分。如果没有为该参数发送参数,则使用默认值。默认值必须是常量。 这样一来,我们将无法使用System.Environment.NewLine或使用新实例化的对象作为默认值。我还没有使用过VS2010,这真令人失望!

8
C#“动态”无法访问在另一个程序集中声明的匿名类型的属性
只要我ClassSameAssembly在与类相同的程序集中具有类,则下面的代码运行良好Program。但是,当我将类ClassSameAssembly移到单独的程序集时,将RuntimeBinderException抛出一个(见下文)。有可能解决吗? using System; namespace ConsoleApplication2 { public static class ClassSameAssembly { public static dynamic GetValues() { return new { Name = "Michael", Age = 20 }; } } internal class Program { private static void Main(string[] args) { var d = ClassSameAssembly.GetValues(); Console.WriteLine("{0} is {1} years old", d.Name, d.Age); } …

5
是否将任务创建为后台线程?
我只是想知道dot.net 4中的新Task类是创建后台线程还是前台线程? 通常我会在线程上设置“ IsBackground”,但是在Task上没有这样的属性。 我无法在MSDN上找到有关此文件的任何文档:-(
85 c#-4.0 


3
仅将唯一项添加到列表
我将远程设备添加到列表中,因为它们会在网络上宣布自己。我只想将设备添加到列表中(如果以前未添加过)。 这些通知是通过异步套接字侦听器传递的,因此添加设备的代码可以在多个线程上运行。我不确定自己做错了什么,但不管尝试什么,最终都会出现重复。这是我目前拥有的..... lock (_remoteDevicesLock) { RemoteDevice rDevice = (from d in _remoteDevices where d.UUID.Trim().Equals(notifyMessage.UUID.Trim(), StringComparison.OrdinalIgnoreCase) select d).FirstOrDefault(); if (rDevice != null) { //Update Device..... } else { //Create A New Remote Device rDevice = new RemoteDevice(notifyMessage.UUID); _remoteDevices.Add(rDevice); } }
84 c#  .net  c#-4.0 

10
静态构造函数如何工作?
namespace MyNameSpace { static class MyClass { static MyClass() { //Authentication process.. User needs to enter password } public static void MyMethod() { //Depends on successful completion of constructor } } class Program { static void Main(string[] args) { MyClass.MyMethod(); } } } 这是我假设的顺序 静态构造函数的开始 静态构造函数的结尾 主开始 MyMethod的开始 主端 现在,在任何情况下,如果4将在2之前启动,我都会被搞砸。可能吗?




4
Visual Studio 2010:如何在解决方案中强制执行项目的生成顺序?
我在Visual Studio 2008中对此没有问题,但是VS 2010似乎有问题,我敢打赌这可能是我自己。 我有一个ASP.NET网站项目和一些C#项目(BLL,DAL,NUnit中的测试)的解决方案。我已将测试项目的构建过程配置为自动运行NUnit来运行测试。我想确保在测试项目之前先构建BLL和DAL项目,以便测试将针对最新的编译版本运行(是的,我知道我可以在一个项目中完成所有这些工作,但是我选择不这样做-请多多包涵 :) ) 因此,我将Test项目的依赖项设置为包括BLL,DAL和Web应用程序项目,并且生成顺序显示BLL,DAL,Web Application和测试。但是,我注意到在构建Test项目时实际上并没有构建BLL。 知道这可能是什么,或者我在构建测试项目时可能缺少任何选项来强制其他项目进行构建吗? 在此先感谢您的帮助!

14
比较两个日期时间时忽略毫秒
这可能是一个愚蠢的问题,但我似乎无法弄清楚。我正在比较两个文件的LastWriteTime,但是它总是失败,因为我从网上下载的文件始终将毫秒设置为0,而我的原始文件具有实际值。比较时是否有一种简单的方法可以忽略毫秒? 这是我的功能: //compare file's dates public bool CompareByModifiedDate(string strOrigFile, string strDownloadedFile) { DateTime dtOrig = File.GetLastWriteTime(strOrigFile); DateTime dtNew = File.GetLastWriteTime(strDownloadedFile); if (dtOrig == dtNew) return true; else return false; } 提前致谢
76 c#  datetime  c#-4.0 


4
WPF或Windows窗体
我已经使用C#控制台应用程序大约一年了,我想继续创建GUI应用程序。除了基本的Java应用程序外,我从未进行过任何GUI开发,但我想继续使用C#。我应该开始学习Windows窗体还是直接跳到WPF?有很大的不同吗?WPF是建立在Windows窗体之上还是完全不同?
75 c#  wpf  windows  winforms  c#-4.0 

6
领域与财产。性能优化
请注意此问题仅与性能有关。让我们跳过设计准则,理念,兼容性,可移植性以及与纯性能无关的任何内容。谢谢。 现在到问题。我一直以为,因为C#的getter / setters实际上是伪装的方法,所以读取公共字段必须比调用getter更快。 因此,请确保我进行了测试(下面的代码)。但是,如果从Visual Studio内部运行此测试,则只能产生预期的结果(即,字段比getter的速度快34%)。 从命令行运行后,它将显示几乎相同的时间... 唯一的解释可能是CLR进行了其他优化(如果我在这里错了,请纠正我)。 我不认为在实际应用中以更复杂的方式使用这些属性时,它们将以相同的方式进行优化。 请帮助我证明或否定现实生活中的属性比字段慢的想法。 问题是-我应该如何修改测试类以使CLR更改行为,以便公共领域优于吸气剂。或告诉我,任何没有内部逻辑的属性都将与字段表现相同(至少在getter上) 编辑:我只在谈论发布x64版本。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace PropertyVsField { class Program { static int LEN = 20000000; static void Main(string[] args) { List<A> a = new List<A>(LEN); List<B> b = new List<B>(LEN); …

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.