Questions tagged «c#-3.0»

C#3.0(“ C#Orcas”)引入了一些基于C#2.0的语言扩展,以支持创建和使用更高阶的功能样式类库。通过扩展,可以构造组成型API,这些组成型API在关系数据库和XML等域中具有相等的查询语言表达能力。如果您的问题专门与C#3.0特定功能有关,请使用此标记。否则,只需使用C#标签。

18
与lambda不同()?
是的,所以我有一个不可估量的并希望从中获得独特的价值。 使用System.Linq,当然有一个扩展方法称为Distinct。在简单的情况下,可以不使用任何参数,例如: var distinctValues = myStringList.Distinct(); 很好,但是如果我有一个需要枚举的对象枚举,则唯一可用的重载是: var distinctValues = myCustomerList.Distinct(someEqualityComparer); 相等比较器参数必须是的实例IEqualityComparer<T>。我当然可以做到这一点,但这有点冗长,而且很笨拙。 我本来希望是一个过载,它需要一个lambda,例如Func <T,T,bool>: var distinctValues = myCustomerList.Distinct((c1, c2) => c1.CustomerId == c2.CustomerId); 任何人都知道是否存在这样的扩展名或等效的解决方法?还是我错过了什么? 另外,有没有一种方法可以指定内联IEqualityComparer(使我感到尴尬)? 更新资料 我发现Anders Hejlsberg对MSDN论坛中有关此主题的帖子进行了回复。他说: 您将遇到的问题是,当两个对象比较相等时,它们必须具有相同的GetHashCode返回值(否则Distinct内部使用的哈希表将无法正常运行)。我们使用IEqualityComparer,因为它会将Equals和GetHashCode的兼容实现打包到单个接口中。 我想这是有道理的。

30
找不到元数据文件“ .dll”
我正在WPF,C#3.0项目中工作,但出现此错误: Error 1 Metadata file 'WORK=- \Tools\VersionManagementSystem\BusinessLogicLayer\bin\Debug \BusinessLogicLayer.dll' could not be found C:\-=WORK=- \Tools \VersionManagementSystem\VersionManagementSystem\CSC VersionManagementSystem 这是我引用用户控件的方式: xmlns:vms="clr-namespace:VersionManagementSystem" <vms:SignOffProjectListing Margin="5"/> 它在每次构建失败后发生。获得编译解决方案的唯一方法是注释掉所有用户控件并重新生成项目,然后取消注释用户控件,一切都很好。 我已经检查了构建顺序和依赖项配置。 如您所见,它似乎已经截断了DLL文件的绝对路径...我读到长度存在错误。这可能是问题吗? 这很烦人,必须评论,构建和取消注释,构建变得非常累人。

16
获取实现接口的所有类型
使用反射,如何以最少的代码获得使用C#3.0 / .NET 3.5实现接口的所有类型,并最大程度地减少迭代次数? 这是我要重写的内容: foreach (Type t in this.GetType().Assembly.GetTypes()) if (t is IMyInterface) ; //do stuff

4
从字符串填充XDocument
我正在做一些事情,我试图弄清楚是否可以从字符串加载XDocument。XDocument.Load()似乎将传递给它的字符串作为物理XML文件的路径。 我想尝试绕过首先必须创建物理XML文件并直接跳至填充XDocument的步骤。 有任何想法吗?
358 c#  xml  c#-3.0  linq-to-xml 

15
C#Lambda表达式:为什么要使用它们?
我已经快速阅读了Microsoft Lambda Expression文档。 但是,这种示例有助于我更好地理解: delegate int del(int i); del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 但是,我仍然不明白为什么它是如此创新。这只是“方法变量”结束时消失的方法,对吗?为什么要使用此方法而不是实际方法?
309 c#  c#-3.0  lambda 

30
LINQ最难或最容易被误解的方面是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 背景:在接下来的一个月,我会给出约或至少包括三名会谈LINQ的背景下C#。我想根据人们可能难以理解的内容,或者对他们的印象有误的情况,来了解哪些主题值得关注。我不会特别谈论LINQ到SQL或实体框架除了作为如何查询可以远程使用表达式树(通常被执行的例子IQueryable)。 那么,您发现了什么困难LINQ呢?您对误解有何见解?示例可能是以下任何一种,但请不要限制自己! C#编译器如何处理查询表达式 Lambda表达式 表达树 扩展方式 匿名类型 IQueryable 延迟执行与立即执行 流与缓冲执行(例如,OrderBy被延迟但被缓冲) 隐式类型的局部变量 读取复杂的通用签名(例如Enumerable.Join)
282 c#  linq  c#-3.0 

6
在C#中,什么是单子?
这些天有很多关于单子的讨论。我已经阅读了几篇文章/博客文章,但是对于他们的例子我无法走得太远,无法完全理解这个概念。原因是monad是一种功能语言概念,因此示例使用的是我未曾使用过的语言(因为我没有深入使用功能语言)。我不能足够深入地理解语法以完全阅读本文……但是我可以告诉您那里有一些值得理解的地方。 但是,我非常了解C#,包括lambda表达式和其他功能。我知道C#仅具有部分功能,因此也许monads无法用C#表示。 但是,肯定可以传达这个概念吗?至少我希望如此。也许您可以提出一个C#示例作为基础,然后描述C#开发人员希望他从那里做些什么,但是不能做,因为该语言缺少功能性的编程功能。这将是很棒的,因为它将传达单子的意图和好处。所以这是我的问题:对C#3开发人员来说,可以给monad最好的解释是什么? 谢谢! (编辑:顺便说一句,我知道SO上至少已经有3个“什么是单子”问题。但是,我也面临着同样的问题...所以这个问题是imo所需要的,因为C#开发人员重点。谢谢。)
189 c#  c#-3.0  lambda  monads 

5
如何使用Linq从对象列表中获取属性的唯一列表?
我正在尝试使用Linq返回给定的id列表,其中id是属性的对象列表。我希望能够做到这一点,而无需遍历每个对象并提取出我发现的唯一ID。 我有一个MyClass类型的对象列表,此类的属性之一是ID。 public class MyClass { public int ID { get; set; } } 我想做的是编写一个Linq查询以向我返回这些ID的列表 给定一个IList<MyClass>使得返回IEnumerable<int>ID的ID ,我该怎么做? 我确信使用Linq可以在一两行中完成此操作,而不是循环遍历MyClass列表中的每个项目并将唯一值添加到列表中。 在创建一个优雅的解决方案的任何帮助将不胜感激!
171 linq  class  list  c#-3.0  properties 

7
实现C#通用超时
我正在寻找实现通用方法以使单行(或匿名委托)代码超时执行的好主意。 TemperamentalClass tc = new TemperamentalClass(); tc.DoSomething(); // normally runs in 30 sec. Want to error at 1 min 我正在寻找一种可以在我的代码与气质代码进行交互的许多地方优雅地实现的解决方案(我无法更改)。 另外,如果可能的话,我想阻止令人讨厌的“超时”代码进一步执行。

10
C#3.0+中属性和字段之间的区别
Наэтотвопросестьответына 堆栈溢出нарусском:Длячегонужнысвойства? 我意识到这似乎是C#中的字段和属性之间的区别是什么的副本?但是我的问题(从我的角度来看)略有不同: 一旦我知道 我不会将我的课程与“仅适用于房地产的技术”结合使用,并且 我不会在getter / setter中使用验证代码。 有什么区别(样式/未来开发除外),例如设置属性时的某种控件? 之间是否还有其他区别: public string MyString { get; set; } 和 public string myString; (我知道,第一个版本需要C#3.0或更高版本,并且编译器确实会创建专用字段。)

8
当作为纯Delegate参数提供时,为什么必须强制转换lambda表达式
采取方法System.Windows.Forms.Control.Invoke(Delegate方法) 为什么会给出编译时错误: string str = "woop"; Invoke(() => this.Text = str); // Error: Cannot convert lambda expression to type 'System.Delegate' // because it is not a delegate type 但这工作正常: string str = "woop"; Invoke((Action)(() => this.Text = str)); 该方法何时需要普通代表?
124 c#  c#-3.0  delegates  lambda 

8
将范围添加到集合
一位同事今天问我如何将范围添加到集合中。他有一个继承自的类Collection<T>。有一个该类型的get-only属性,其中已经包含一些项目。他想将另一个集合中的项目添加到属性集合中。他如何以C#3友好的方式这样做?(请注意有关“仅获取”属性的约束,该约束会阻止执行Union和重新分配之类的解决方案。) 当然,与财产有关。添加将起作用。但是,List<T>风格的AddRange会更加优雅。 编写扩展方法很容易: public static class CollectionHelpers { public static void AddRange<T>(this ICollection<T> destination, IEnumerable<T> source) { foreach (T item in source) { destination.Add(item); } } } 但是我有种自己在重新发明轮子的感觉。我没有发现任何类似的System.Linq或morelinq。 设计不好?只需致电添加?缺少明显之处?


3
如何动态创建新的匿名类?
在C#3.0中,您可以使用以下语法创建匿名类 var o1 = new { Id = 1, Name = "Foo" }; 有没有办法动态地将这些匿名类创建为变量? 例: var o1 = new { Id = 1, Name = "Foo" }; var o2 = new { SQ = 2, Birth = DateTime.Now }; 动态创建示例: var o1 = DynamicNewAnonymous(new NameValuePair("Id", 1), new NameValuePair("Name", "Foo")); var …

7
我可以对Dictionary <TKey,TValue>条目使用集合初始化程序吗?
我想在下一段代码中使用集合初始化程序: public Dictionary&lt;int, string&gt; GetNames() { Dictionary&lt;int, string&gt; names = new Dictionary&lt;int, string&gt;(); names.Add(1, "Adam"); names.Add(2, "Bart"); names.Add(3, "Charlie"); return names; } 所以通常应该是这样的: return new Dictionary&lt;int, string&gt; { 1, "Adam", 2, "Bart" ... 但是正确的语法是什么?

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.