Questions tagged «c#»

C#(发音为“ See Sharp”)是由Microsoft开发的一种高级,静态类型的多范例编程语言。C#代码通常针对Microsoft的.NET系列工具和运行时,其中包括.NET Framework,.NET Core和Xamarin。使用此标记可解决有关用C#或C#正式规范编写的代码的问题。


18
XmlSerializer-反映类型错误
使用C#.NET 2.0,我有一个复合数据类,它确实具有[Serializable]属性。我正在创建一个XMLSerializer类,并将其传递给构造函数: XmlSerializer serializer = new XmlSerializer(typeof(DataClass)); 我正在说一个例外: 反映类型时发生错误。 在数据类内部,还有另一个复合对象。这是否还需要具有该[Serializable]属性,或者通过将其放在顶部对象上,是否将其递归地应用于内部的所有对象?
332 c#  .net  xml  serialization  .net-2.0 

30
有没有比“打开类型”更好的选择了?
看到C#不能switch在类型上(我收集的这种数据没有作为特殊情况添加,因为is关系意味着case可能应用多个不同的对象),是否有更好的方法来模拟其他类型的切换? void Foo(object o) { if (o is A) { ((A)o).Hop(); } else if (o is B) { ((B)o).Skip(); } else { throw new ArgumentException("Unexpected type: " + o.GetType()); } }

30
断点当前不会被命中。Silverlight应用程序中尚未为此文档加载任何符号
好的,我有: Visual Studio 2010 RC W7 x64启动了Silverlight应用程序的新项目类型。将Silverlight应用程序托管在ASP.NET Web应用程序项目中。Silverlight 3.0版。添加了LinqToSQL类,WCF服务,Winform Tester应用程序(解决方案中的项目)和一些类(也作为解决方案中的项目)。 昨天,突然间我得到了“当前不会找到断点。没有为该文档加载任何符号。消息出现在IDE中,但只影响Web应用程序,我可以调试Silverlight和Winform App。 我尝试/做了的摆脱消息的事情: 重置Visual Studio设置 删除每个\ Temporary ASP.NET Files文件夹中的所有文件(每个32bit / 64bit以及Framework 2.0和4.0都有一个) 尝试使用Visual Studio Integrated Web服务器进行调试-通常我使用IIS,在解决方案的项目输出中,我删除了每个项目文件夹中的每个obj和bin文件夹 创建了一个新的解决方案并将所有项目添加到该新解决方案中 删除解决方案suo文件 创建了一个新的ASP.NET Web应用程序以测试它是否是VS安装问题=>我可以调试此新项目/解决方案 重新启动机器几次 修复了vs.net安装 做了一个IISReset 从IIS中删除了Web应用程序 使用Web应用程序的“项目属性”下的“创建虚拟目录”按钮在IIS中创建新的Web应用程序 将每个项目的Framework版本从3.5更改为4.0 在第二台机器上打开解决方案=>行为相同 对Microsoft Connect进行爬网以查找错误/类似问题 花了7小时。 因此,这是我生命中的第二次。上次我通过删除Temporary ASP.NET Files Folder解决了该问题,但这一次我需要您的帮助。
331 c#  asp.net  wcf  debugging  iis 

10
“ as”和可为空的类型带来的性能惊喜
我只是在修改C#中有关可空类型的第4章,并添加了有关使用“ as”运算符的部分,该部分允许您编写: object o = ...; int? x = o as int?; if (x.HasValue) { ... // Use x.Value in here } 我认为这确实很整洁,并且可以使用“ is”后跟强制类型转换来提高C#1等效项的性能-毕竟,这种方式我们只需要进行一次动态类型检查,然后进行简单的值检查。 但是,情况似乎并非如此。我在下面提供了一个示例测试应用程序,该应用程序基本上将对象数组中的所有整数相加-但该数组包含许多空引用和字符串引用以及装箱的整数。该基准测试可测量您在C#1中必须使用的代码,这些代码使用“ as”运算符,并且仅用于启动LINQ解决方案。令我惊讶的是,在这种情况下,C#1代码的速度提高了20倍-甚至LINQ代码(考虑到涉及的迭代器,我希望它也会更慢)击败了“ as”代码。 isinst可为空的类型的.NET实现真的很慢吗?是unbox.any导致问题的其他因素吗?对此还有其他解释吗?目前,感觉就像我将不得不警告不要在性能敏感的情况下使用此功能... 结果: 演员:10000000:121 身份:10000000:2211 LINQ:10000000:2143 码: using System; using System.Diagnostics; using System.Linq; class Test { const int Size = 30000000; static void Main() …

12
了解C#中的事件和事件处理程序
我了解事件的目的,尤其是在创建用户界面的上下文中。我认为这是创建事件的原型: public void EventName(object sender, EventArgs e); 事件处理程序做什么,为什么需要它们,以及如何创建事件处理程序?

6
如何返回一个空的IEnumerable?
鉴于以下代码和此问题给出的建议,我决定修改此原始方法,并询问IEnumarable中是否有任何值返回它,如果不返回没有值的IEnumerable。 方法如下: public IEnumerable<Friend> FindFriends() { //Many thanks to Rex-M for his help with this one. //https://stackoverflow.com/users/67/rex-m return doc.Descendants("user").Select(user => new Friend { ID = user.Element("id").Value, Name = user.Element("name").Value, URL = user.Element("url").Value, Photo = user.Element("photo").Value }); } 由于所有内容都在return语句中,所以我不知道该怎么做。这样的事情行吗? public IEnumerable<Friend> FindFriends() { //Many thanks to Rex-M for his help with …
329 c#  ienumerable 



7
什么时候应该使用Lazy <T>?
我发现这篇文章是关于 Lazy:C#4.0中的惰性-惰性 使用惰性对象具有最佳性能的最佳实践是什么?有人可以指出我在实际应用中的实际用途吗?换句话说,什么时候应该使用它?
327 c#  .net  lazy-evaluation 

17
您可以在ASP.NET MVC中重载控制器方法吗?
我很好奇您是否可以在ASP.NET MVC中重载控制器方法。每当我尝试时,都会出现以下错误。这两种方法接受不同的参数。这是无法完成的事情吗? 在以下操作方法之间,当前对控制器类型“ MyController”的操作“ MyMethod”的请求不明确:

4
如何告诉Moq返回任务?
我有一个接口声明 Task DoSomethingAsync(); 我正在使用MoqFramework进行测试: [TestMethod()] public async Task MyAsyncTest() { Mock&lt;ISomeInterface&gt; mock = new Mock&lt;ISomeInterface&gt;(); mock.Setup(arg =&gt; arg.DoSomethingAsync()).Callback(() =&gt; { &lt;my code here&gt; }); ... } 然后在测试中,我执行调用的代码await DoSomethingAsync()。测试只是失败了。我究竟做错了什么?


8
为什么我应该使用IHttpActionResult而不是HttpResponseMessage?
我一直在使用WebApi进行开发,然后转到了WebApi2,Microsoft在其中引入了一个新的IHttpActionResult接口,似乎建议将其用于返回a的接口HttpResponseMessage。我对这个新界面的优势感到困惑。它似乎主要只是提供了一种稍微容易些的创建方式HttpResponseMessage。 我认为这是“抽象的抽象”。我想念什么吗?除了节省一行代码之外,使用此新接口还能给我带来什么现实世界的好处? 旧方法(WebApi): public HttpResponseMessage Delete(int id) { var status = _Repository.DeleteCustomer(id); if (status) { return new HttpResponseMessage(HttpStatusCode.OK); } else { throw new HttpResponseException(HttpStatusCode.NotFound); } } 新方法(WebApi2): public IHttpActionResult Delete(int id) { var status = _Repository.DeleteCustomer(id); if (status) { //return new HttpResponseMessage(HttpStatusCode.OK); return Ok(); } else { //throw new HttpResponseException(HttpStatusCode.NotFound); …

12
运算符==不能应用于C#中的泛型类型吗?
根据MSDN中==运营商的文档, 对于预定义的值类型,相等运算符(==)如果其操作数的值相等,则返回true,否则返回false。对于字符串以外的引用类型,如果==的两个操作数引用同一对象,则==返回true。对于字符串类型,==比较字符串的值。用户定义的值类型可能会使==运算符重载(请参阅运算符)。用户定义的引用类型也可以,尽管 默认情况下==的行为与上述预定义和用户定义的引用类型相同。 那么,为什么此代码片段无法编译? bool Compare&lt;T&gt;(T x, T y) { return x == y; } 我收到错误运算符'=='不能应用于类型'T'和'T'的操作数。我不知道为什么,因为据我所知,该==操作符是为所有类型预定义的? 编辑:谢谢大家。起初我没有注意到该声明仅与引用类型有关。我还认为为所有值类型提供了逐位比较,现在我知道这是不正确的。 但是,如果我使用的是引用类型,==操作员会使用预定义的引用比较吗?如果定义了一个类型,它会使用操作员的重载版本吗? 编辑2:通过反复试验,我们了解到,==当使用无限制的泛型类型时,运算符将使用预定义的引用比较。实际上,编译器将使用它可以为受限类型参数找到的最佳方法,但是不再赘述。例如,true即使Test.test&lt;B&gt;(new B(), new B())被调用,下面的代码也将始终print : class A { public static bool operator==(A x, A y) { return true; } } class B : A { public static bool operator==(B x, B y) …

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.