Questions tagged «c#»

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

5
为什么C#编译器允许空枚举?
我今天不小心定义了一个不包含任何值的枚举。像这样一个例子: public enum MyConfusingEnum{} 编译器很高兴让我定义它并成功构建了代码。 现在我显然不能使用传统意义上的代码,因为代码.. var mySadCompiler = MyConfusingEnum; 没有指定值,但有趣的是我很能说,.. var myRoundTheHousesZeroState = Activator.CreateInstance<MyConfusingEnum>(); 正如我提到的那样,它是MyConfusingEnum值为0的值类型; 我的问题是,为什么编译器允许空定义,并且在任何情况下它都可能有用?

17
如何在C#中创建Word文档?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 7年前关闭。 改善这个问题 我有一个项目,我想以MS Word格式生成报告导出。该报告将包括图像/图形,表格和文本。做这个的最好方式是什么?第三方工具?你有什么经验?
73 c#  .net  ms-word  openxml 

4
如何将证书添加到WebClient(C#)?
我知道将证书添加到HttpWebRequest非常简单。但是,我还没有找到一种使用WebClient进行等效操作的方法。基本上,我想使用WebClient发送带有特定证书的POST。 您将如何使用WebClient完成此确切代码: var request = (HttpWebRequest) WebRequest.Create("my-url"); request.Method = "POST"; request.ClientCertificates.Add(new X509Certificate()); //add cert

3
参考利益薄弱
有人可以解释C#中不同类型的引用的主要好处吗? 参考文献薄弱 软参考 幻影参考 有力的参考。 我们有一个消耗大量内存的应用程序,我们正在尝试确定这是否是一个需要重点关注的领域。

3
要返回IQueryable <T>还是不返回IQueryable <T>
我有一个存储库类,将我的LINQ包装到SQL数据上下文中。存储库类是业务线类,其中包含所有数据层逻辑(以及缓存等)。 这是我的repo界面的v1。 public interface ILocationRepository { IList&lt;Location&gt; FindAll(); IList&lt;Location&gt; FindForState(State state); IList&lt;Location&gt; FindForPostCode(string postCode); } 但是为了处理FindAll的分页,我正在辩论是否公开IQueryable &lt;ILocation&gt;而不是IList来简化诸如分页之类的接口。 从数据存储库中公开IQueryable的利弊是什么? 很感谢任何形式的帮助。

5
可以在XAML(.NET 4之前的版本)中指定通用类型吗?
在XAML中,我可以声明一个DataTemplate以便在显示特定类型时使用该模板。例如,此DataTemplate将使用TextBlock显示客户名称: &lt;DataTemplate DataType="{x:Type my:Customer}"&gt; &lt;TextBlock Text="{Binding Name}" /&gt; &lt;/DataTemplate&gt; 我想知道是否可以定义将在每次显示IList &lt;Customer&gt;时使用的DataTemplate。因此,例如,如果ContentControl的Content是ObservableCollection &lt;Customer&gt;,它将使用该模板。 是否可以使用{x:Type}标记扩展在XAML中声明类似IList的泛型类型?
73 c#  wpf  xaml  generics 

1
String.Substring()似乎使此代码成为瓶颈
介绍 我有一个很喜欢的算法,我很早以前就做了,我一直在用新的编程语言,平台等来编写和重新编写某种基准。尽管我的主要编程语言是C#,但是我只是从字面上复制粘贴了代码,并稍稍更改了语法,使用Java进行了构建,并发现其运行速度快了1000倍。 编码 有很多代码,但是我仅要介绍这个片段,这似乎是主要问题: for (int i = 0; i &lt;= s1.Length; i++) { for (int j = i + 1; j &lt;= s1.Length - i; j++) { string _s1 = s1.Substring(i, j); if (tree.hasLeaf(_s1)) ... 数据 重要的是要指出,在此特定测试中,字符串s1的长度为1百万个字符(1MB)。 测量 我之所以在Visual Studio中介绍代码执行情况,是因为我认为构造树或遍历树的方法不是最佳方法。检查结果后,该行似乎占据string _s1 = s1.Substring(i, j);了执行时间的90%以上! 其他观察 我注意到的另一个区别是,尽管我的代码是单线程的Java还是设法使用所有8个内核(100%CPU使用率)执行它,而即使使用Parallel.For()和多线程技术,我的C#代码也设法使用了35-最多40%。由于该算法随内核数(和频率)线性扩展,因此我对此进行了补偿,而Java中的代码段执行速度却快了100-1000倍。 推理 我认为发生这种情况的原因与以下事实有关:C#中的字符串是不可变的,因此String.Substring()必须创建一个副本,并且由于它位于具有多次迭代的嵌套for循环中,所以我想很多复制和正在进行垃圾收集,但是,我不知道Substring是如何在Java中实现的。 题 …

7
.net服务总线建议?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 9年前关闭。 我们需要具有发布/订阅功能的分布式体系结构消息系统/服务总线。有人对我们可以用于.net应用程序的框架有任何建议吗?

2
C#中基于接口的编程的操作员重载
背景 我在当前项目上使用基于接口的编程,并且在重载运算符(特别是Equality和Inequality运算符)时遇到了问题。 假设条件 我正在使用C#3.0,.NET 3.5和Visual Studio 2008 更新-以下假设是错误的! 要求所有比较均使用Equals而不是operator ==并不是一个可行的解决方案,尤其是在将类型传递给库(例如Collections)时。 我担心要求使用Equals而不是operator ==的原因是,我在.NET指南中找不到它说它将使用Equals而不是operator ==甚至没有建议的地方。但是,在重新阅读《覆盖等于和运算符==的准则》之后,我发现了这一点: 默认情况下,运算符==通过确定两个引用是否指示同一对象来测试引用是否相等。因此,引用类型不必实现运算符==即可获得此功能。当类型是不可变的,即实例中包含的数据不能更改时,重载运算符==以比较值相等而不是引用相等是有用的,因为作为不可变对象,它们可以被认为与因为它们具有相同的价值。在非不可变类型中覆盖运算符==不是一个好主意。 这个平等的接口 当使用诸如Contains,IndexOf,LastIndexOf和Remove这样的方法测试是否相等时,IEquatable接口将由Dictionary,List和LinkedList等通用集合对象使用。应该为可能存储在通用集合中的任何对象实现它。 制约因素 任何解决方案都不必要求将对象从其接口转换为具体类型。 问题 当operator ==的两端都是接口时,没有底层具体类型的operator ==重载方法签名匹配,因此将调用默认的Object operator ==方法。 在类上重载运算符时,二进制运算符的至少一个参数必须为包含类型,否则会生成编译器错误(错误BC33021 http://msdn.microsoft.com/zh-cn/library/watt39ff .aspx) 无法在接口上指定实现 请参阅下面的代码和输出演示问题。 题 使用基于接口的编程时,如何为类提供适当的运算符重载? 参考文献 ==运算符(C#参考) 对于预定义的值类型,相等运算符(==)如果其操作数的值相等,则返回true,否则返回false。对于字符串以外的引用类型,如果==的两个操作数引用相同的对象,则返回true。对于字符串类型,==比较字符串的值。 也可以看看 码 using System; namespace OperatorOverloadsWithInterfaces { public interface IAddress : IEquatable&lt;IAddress&gt; { string StreetName { …

2
新的netstandardapp和netcoreapp TFM有什么区别?
我注意到NuGet最近增加了对与.NET Core相关的几个新TFM的支持,其中包括: netstandard (1.0-1.5) netstandardapp (1.5) netcoreapp (1.0) 就我所知,netstandard.NET Core相当于可移植的配置文件。它使您可以使用一个绰号将多个平台作为目标,而不是明确列出支持的每个平台,例如portable-net45+netcore45+wp81。 同时,根据本文档, netstandardapp它更像.NET Core中的控制台应用程序;它代表任何.NET Core运行时(例如CoreCLR,CoreRT)。 那么究竟netcoreapp应该是什么呢?我在这里找到了跟踪问题,其中在底部包含一条注释,有点解释了区别,但是我没有得到两者之间的区别 NETStandard.Library +应用程序主机 和 .NET Core基本安装 是。有人可以给我解释一下吗?

1
如何使我的代码诊断语法节点操作对关闭的文件起作用?
我正在使用Roslyn(在VS2015 Preview中)构建一组代码诊断。理想情况下,我希望它们产生的任何错误都可以作为持久错误,就像我违反了正常的语言规则一样。 有很多选择,但是我很难让其中任何一个都能一致地工作。我设法实现了基本的语法节点操作,即已向 context.RegisterSyntaxNodeAction(AnalyzeSyntaxNode, SyntaxKind.InvocationExpression); 在Initialize我的诊断课的方法中。瞧,当我打开一个违反此诊断的文件时(运行VSIX项目时),VS2015显示错误: 正确的代码下的红色花体 边缘有红色方块 错误列表中的错误 但是,关闭文件时错误消失了。 我也尝试过使用context.RegisterCompilationEndAction,但这有两个问题: 它似乎不一致地发射。通常,当我打开解决方案时,它会触发,但并非总是如此。它不会在清理/重建时启动,这似乎很奇怪。 尽管直接在分析方法中创建的诊断会触发,但为了实现诊断,我正在使用访问者,如下所示-这可能是无能的: private static void AnalyzeEndCompilation(CompilationEndAnalysisContext context) { foreach (var tree in context.Compilation.SyntaxTrees) { var visitor = new ReportingVisitor(context.Compilation.GetSemanticModel(tree)); visitor.Visit(tree.GetRoot()); foreach (var diagnostic in visitor.Diagnostics) { context.ReportDiagnostic(diagnostic); } } } 我知道正在创建诊断程序-ReportDiagnostic多次击中断点-但在错误列表中没有看到任何内容。(与此同时ReportDiagnostic,在方法开始时会显示一个类似的调用,或者会在每个带有文件路径的语法树中显示一个调用。) 我在这里做错了什么?如果可行,第一种方法(语法节点操作)将是理想的-它恰好为我提供了所需的上下文。我是否需要在项目属性中进行一些设置,以使编译器将其用于“完整项目”编译以及交互式“在IDE中”处理?这可能只是Roslyn集成的一部分,还没有完成? (如果有用的话,我可以包括该类的完整代码-在这种情况下,我怀疑它比信号要多的噪音。)

2
访问StackExchange.Redis时出现死锁
调用StackExchange.Redis时,我陷入了僵局。 我不知道到底是怎么回事,这非常令人沮丧,我将感谢您提供任何有助于解决或解决此问题的建议。 如果您也有这个问题,并且不想阅读所有这些内容; 我建议您尝试设置PreserveAsyncOrder为false。 ConnectionMultiplexer connection = ...; connection.PreserveAsyncOrder = false; 这样做可能会解决此Q&A即将发生的僵局,并且还可以提高性能。 我们的设置 该代码既可以作为控制台应用程序运行,也可以作为Azure工作者角色运行。 它使用HttpMessageHandler公开REST api,因此入口点是异步的。 代码的某些部分具有线程相似性(由单个线程拥有,并且必须由单个线程运行)。 代码的某些部分是仅异步的。 我们正在做异步同步和异步同步的反模式。(混合await和Wait()/ Result)。 访问Redis时,我们仅使用异步方法。 我们将.NET 4.5使用StackExchange.Redis 1.0.450。 僵局 当应用程序/服务启动时,它会正常运行一段时间,然后突然(几乎)所有传入请求停止运行,它们永远不会产生响应。所有这些请求都陷入僵局,等待对Redis的调用完成。 有趣的是,一旦发生死锁,对Redis的任何调用都将挂起,但前提是这些调用是由在线程池上运行的传入API请求进行的。 我们还从低优先级的后台线程对Redis进行了调用,即使死锁发生后,这些调用仍继续起作用。 似乎只有在线程池线程上调用Redis时才会发生死锁。我不再认为这是由于这些调用是在线程池线程上进行的。而是,即使发生死锁情况,似乎任何没有继续执行或具有同步安全继续执行的异步Redis调用都将继续起作用。(请参阅下面我的看法) 有关 StackExchange.Redis死锁 混合await和Task.Result(像我们这样,异步同步)导致死锁。但是我们的代码在没有同步上下文的情况下运行,因此不适用于这里,对吧? 如何安全地混合同步和异步代码? 是的,我们不应该那样做。但是我们这样做了,我们将不得不继续这样做一段时间。许多代码需要迁移到异步世界中。 同样,我们没有同步上下文,因此这不应引起死锁,对吗? 设置ConfigureAwait(false)之前await没有任何影响。 异步命令和Task.WhenAny在StackExchange.Redis中等待后发生超时异常 这是线程劫持问题。目前情况如何?这可能是问题所在吗? StackExchange.Redis异步调用挂起 从马克的答案: ...混合等待和等待不是一个好主意。除了死锁,这是“异步同步”-一种反模式。 但是他也说: SE.Redis内部绕过同步上下文(对于库代码而言是正常的),因此它不应具有死锁 因此,据我了解,StackExchange.Redis应该与我们是否使用sync-over-async反模式无关。只是不建议这样做,因为它可能是其他代码中死锁的原因。 但是,据我所知,在这种情况下,死锁确实在StackExchange.Redis内部。如果我错了,请纠正我。 调试结果 我发现僵局似乎有其源ProcessAsyncCompletionQueue上的124线CompletionManager.cs。 该代码段: while (Interlocked.CompareExchange(ref …


2
Bitmap.Clone()和新的Bitmap(Bitmap)有什么区别?
据我所知,有两种复制位图的方法。 Bitmap.Clone() Bitmap A = new Bitmap("somefile.png"); Bitmap B = (Bitmap)A.Clone(); 新的Bitmap() Bitmap A = new Bitmap("somefile.png"); Bitmap B = new Bitmap(A); 这些方法有何不同?我对内存和线程方面的差异特别感兴趣。
73 c#  bitmap  clone 

19
在JavaScript中使用String.Format吗?
这让我发疯。我相信我也问过同样的问题,但是我再也找不到了(我使用了Stack Overflow搜索,Google搜索,手动搜索帖子以及搜索代码)。 我想要类似C#String.Format的东西,您可以像 string format = String.Format("Hi {0}",name); 当然,仅针对JavaScript,一个人给了我一个简单的答案,它不像jQuery插件或其他任何东西,但我认为您制作了一些JSON或类似的东西,并且有效且易于使用。 我一生中找不到这篇文章。 我的代码中确实有这个,但是我似乎找不到任何可以使用它的东西,而且我很确定我已经使用了几次: String.prototype.format = function(o) { return this.replace(/{([^{}]*)}/g, function(a, b) { var r = o[b]; return typeof r === 'string' ? r : a; } ); };
73 c#  .net  javascript 

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.