Questions tagged «c#-4.0»

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

10
互操作类型无法嵌入
我正在用C#在.NET 4.0框架(beta2)上创建一个Web应用程序。 当我尝试使用名为“ ActiveHomeScriptLib”的程序集时,出现以下错误: 无法嵌入互操作类型'ActiveHomeScriptLib.ActiveHomeClass'。请改用适用的界面。 当我将框架更改为版本3.5时,我没有任何错误。 什么是互操作类型?为什么仅在使用4.0框架时才会发生这种情况?

10
ExpandoObject的真正好处是什么?
添加到.NET 4 的ExpandoObject类使您可以在运行时将属性任意设置到对象上。 与使用Dictionary<string, object>甚至是哈希表相比,这有什么好处吗?据我所知,这不过是一个哈希表,您可以使用更简洁的语法来访问它。 例如,为什么这样: dynamic obj = new ExpandoObject(); obj.MyInt = 3; obj.MyString = "Foo"; Console.WriteLine(obj.MyString); 与以下内容相比确实更好,或有很大不同: var obj = new Dictionary<string, object>(); obj["MyInt"] = 3; obj["MyString"] = "Foo"; Console.WriteLine(obj["MyString"]); 什么真正的优势是通过使用ExpandoObject而不是只使用一个任意字典类型,比不是很明显,您使用的类型是怎么回事在运行时确定的其他获得。
587 c#  .net  .net-4.0  c#-4.0 

8
任务和线程有什么区别?
在C#4.0中,我们Task在System.Threading.Tasks命名空间中。Thread和之间的真正区别是什么Task。为了我自己的学习,我做了一些示例程序(来自MSDN的帮助) Parallel.Invoke Parallel.For Parallel.ForEach 但是有很多疑问,因为这个想法不太清楚。 我最初在Stackoverflow中搜索了类似类型的问题,但可能与此问题标题有关,我无法获得相同的问题。如果有人知道先前在此处发布的相同类型的问题,请提供链接的参考。

4
为什么在实现类上不强制在接口上定义的C#4可选参数?
我注意到,使用C#4中的可选参数,如果您在接口上指定了可选参数,则不必在任何实现类上将该参数设为可选: public interface MyInterface { void TestMethod(bool flag = false); } public class MyClass : MyInterface { public void TestMethod(bool flag) { Console.WriteLine(flag); } } 因此: var obj = new MyClass(); obj.TestMethod(); // compiler error var obj2 = new MyClass() as MyInterface; obj2.TestMethod(); // prints false 有谁知道为什么可选参数设计成这种方式工作? 一方面,我认为覆盖接口上指定的任何默认值的功能很有用,尽管说实话,我不确定您是否应该甚至可以在接口上指定默认值,因为这应该由实现决定。 另一方面,这种断开连接意味着您不能始终交替使用具体的类和接口。当然,如果在实现上指定了默认值,这不会有问题,但是如果您将具体类公开为接口(例如,使用某些IOC框架注入具体类),那么实际上就没有问题了。具有默认值的点作为调用方,无论如何都必须始终提供它。

5
.NET NewtonSoft JSON反序列化映射到其他属性名称
我有以下从外部方收到的JSON字符串。 { "team":[ { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"home", "score":"22", "team_id":"500" } }, { "v1":"", "attributes":{ "eighty_min_score":"", "home_or_away":"away", "score":"30", "team_id":"600" } } ] } 我的映射类: public class Attributes { public string eighty_min_score { get; set; } public string home_or_away { get; set; } public string score { get; set; } public …





15
在Tuple类中比“ Item1”,“ Item2”更好的命名
有没有一种方法可以使用Tuple类,但要提供其中的项目名称? 例如: public Tuple<int, int, int int> GetOrderRelatedIds() 这将返回OrderGroupId,OrderTypeId,OrderSubTypeId和OrderRequirementId的ID。 让我的方法的用户知道哪个是最好的。(当您调用该方法时,结果是result.Item1,result.Item2,result.Item3,result.Item4。尚不清楚哪个是哪个。) (我知道我可以创建一个类来容纳所有这些Id,但是如果这些Id已经拥有自己的类,并且为该方法的返回值创建类似乎很愚蠢。)
204 c#  c#-4.0  tuples 

10
HttpListener访问被拒绝
我正在用C#编写HTTP服务器。 当我尝试执行功能时,HttpListener.Start()我会HttpListenerException说一句 “拒绝访问”。 当我在Windows 7中以管理模式运行该应用程序时,它可以正常工作。 我可以在没有管理员模式的情况下运行它吗?如果是,怎么办?如果没有,在开始运行后如何将应用程序更改为管理模式? using System; using System.Net; namespace ConsoleApplication1 { class Program { private HttpListener httpListener = null; static void Main(string[] args) { Program p = new Program(); p.Server(); } public void Server() { this.httpListener = new HttpListener(); if (httpListener.IsListening) throw new InvalidOperationException("Server is currently running."); httpListener.Prefixes.Clear(); …


4
C#编译器如何检测COM类型?
编辑:我已经将结果写为博客文章。 C#编译器在某种程度上神奇地对待COM类型。例如,此语句看起来很正常... Word.Application app = new Word.Application(); ...直到您意识到这Application是一个界面。在接口上调用构造函数?ik!实际上,这会转换为的调用Type.GetTypeFromCLSID(),另一个是的调用Activator.CreateInstance。 此外,在C#4中,您可以使用非引用参数作为ref参数,并且编译器仅添加一个局部变量以通过引用传递,并丢弃结果: // FileName parameter is *really* a ref parameter app.ActiveDocument.SaveAs(FileName: "test.doc"); (是的,缺少许多参数。可选参数不是很好吗?:) 我正在尝试调查编译器的行为,但未能伪造第一部分。我可以毫无问题地完成第二部分: using System; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; [ComImport, GuidAttribute("00012345-0000-0000-0000-000000000011")] public interface Dummy { void Foo(ref int x); } class Test { static void Main() { Dummy dummy = null; dummy.Foo(10); …


7
何时处置CancellationTokenSource?
该课程CancellationTokenSource是一次性的。快速浏览Reflector即可证明KernelEvent,(很可能是)非托管资源的使用。由于CancellationTokenSource没有终结器,因此如果不处理它,GC将不会这样做。 另一方面,如果您查看MSDN文章“ 托管线程中的取消”中列出的示例,则只有一个代码片段会处理该令牌。 用代码处理它的正确方法是什么? using如果不等待,则无法包装用于启动并行任务的代码。而且只有在您不等待的情况下取消才有意义。 当然,您可以ContinueWith通过Dispose电话添加任务,但这就是方法吗? 可取消的PLINQ查询如何处理,这些查询不同步回去,而只是在最后做一些事情?比方说.ForAll(x => Console.Write(x))? 可重用吗?可以将同一令牌用于多个调用,然后将其与主机组件(例如UI控件)一起处置吗? 因为它没有像一Reset对清理方法IsCancelRequested和Token字段我想这是不能重复使用,这样每次启动一个任务(或PLINQ查询),你应该创建一个新的。是真的吗 如果是,我的问题是Dispose在那么多CancellationTokenSource实例上处理的正确和推荐策略是什么?

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.