Questions tagged «c#»

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




6
(.1f + .2f ==。3f)!=(.1f + .2f).Equals(.3f)为什么呢?
我的问题不是关于浮动精度。这是关于为什么Equals()不同于的原因==。 我明白为什么.1f + .2f == .3f是false(同时.1m + .2m == .3m是true)。 我得到的==是参考,.Equals()是价值的比较。(编辑:我知道这还有更多。) 但是,为什么(.1f + .2f).Equals(.3f) true,而(.1d+.2d).Equals(.3d)仍然是false? .1f + .2f == .3f; // false (.1f + .2f).Equals(.3f); // true (.1d + .2d).Equals(.3d); // false

8
缓存与会话的优势
在会话和缓存中存储数据表有什么区别?优点和缺点是什么? 因此,如果它是一个简单的搜索页面,它会在数据表中返回结果并将其绑定到gridview。如果用户'a'搜索和用户'b'搜索,最好将其存储在Session中,因为每个用户很可能会有不同的结果,或者我是否仍可以将他们的每个搜索存储在Cache中,或者没有意义,因为存在只有一个缓存。我想基本上我想说的是缓存将被覆盖。

3
x?.y?.z是什么意思?
C#中的模式匹配规范草案包含以下代码示例: Type? v = x?.y?.z; if (v.HasValue) { var value = v.GetValueOrDefault(); // code using value } 据我所知,Type?表明Type是空的,但假设x,y以及z是当地居民有哪些呢x?.y?.z是什么意思?

6
SyncRoot模式的用途是什么?
我正在阅读一本描述SyncRoot模式的书。表明 void doThis() { lock(this){ ... } } void doThat() { lock(this){ ... } } 并与SyncRoot模式进行比较: object syncRoot = new object(); void doThis() { lock(syncRoot ){ ... } } void doThat() { lock(syncRoot){ ... } } 但是,我不太了解这里的区别。在这两种情况下,似乎两种方法一次只能由一个线程访问。 这本书描述了……因为实例的对象也可以用于外部的同步访问,并且您无法控制类本身的形式,因此可以使用SyncRoot模式。“实例的对象”? 谁能告诉我以上两种方法之间的区别?

15
在.NET中寻找简单的规则引擎库
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 谁知道一个好的.NET库规则库(理想情况下是开源的)?我需要一些可以执行嵌套逻辑表达式的东西,例如(A AND B)AND(B OR C OR D)。我需要比较对象属性,例如A.P1和B.P1。(理想情况下,我可以比较任何属性-A.P1和B.P2)。 它应该将规则存储在数据库中(我有很多简单的可配置逻辑)。并且它应该具有规则创建/管理API。管理工具将必须检查实例以确定哪些属性可用以及存在哪些约束。 谢谢! 哦,还有一件事。作为规则引擎,我需要包括“动作(命令)”的概念。这些是表达式返回时执行的内容: If (expression.Evaluation) { actions.Execute(); } 因此,我将规则视为: class Rule { Expression Exp; Actions[] Actions; Run() { if(Exp.Evaluate()) { foreach(action in Actions) { action.Execute(); } } } }

5
ASP.NET MVC 5与WebMatrix SimpleMembershipProvider不兼容吗?
我们有一个基于ASP.NET MVC 4和Web API构建的现有应用程序。该站点的管理部分使用简单成员资格。我有兴趣将应用程序升级到MVC 5 / Web API 2,以利用已添加的一些新功能。但是看起来它们可能不兼容。 具体来说,将NuGet的RC软件包安装到我的解决方案中的一个项目中,并更新web.config信息后,该应用程序在启动过程中会在调用的行上开始死亡WebSecurity.InitializeDatabaseConnection(),但以下情况除外: [MethodAccessException: Attempt by security transparent method 'WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(System.Object, WebMatrix.Data.ConnectionEventArgs)' to access security critical method 'System.Web.WebPages.HttpContextExtensions.RegisterForDispose(System.Web.HttpContextBase, System.IDisposable)' failed.] WebMatrix.WebData.PreApplicationStartCode.OnConnectionOpened(Object sender, ConnectionEventArgs e) +70 WebMatrix.Data.Database.OnConnectionOpened() +70 WebMatrix.Data.Database.EnsureConnectionOpen() +51 WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63 WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +13 WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String …

1
为什么DbParameterCollection中的三个属性在引用程序集中是抽象的,否则是虚拟的?
我正在将项目从project.json转换为新的csproj格式,并且其中包括一个从派生的类DbParameterCollection。在我的实际项目中,我正在使用多目标,但是出于这个问题的目的,我们只需要关心即可net45。 编译器告诉我,我必须重写以前不需要的三个属性: IsFixedSize IsReadOnly IsSynchronized 如果遵循这些文档链接(适用于.NET 4.5),则会看到所有属性都是虚拟的-不是抽象的。如果我仅通过调用来构建代码csc,那么一切都很好……只有在使用.NET Core SDK时,我才遇到问题。 下面是重现该问题的示例代码: 项目文件: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>net45</TargetFramework> </PropertyGroup> </Project> C#代码: using System; using System.Collections; using System.Data.Common; public class DummyParameterCollection : DbParameterCollection { public override int Count => 0; public override object SyncRoot => null; public override void Remove(object value) {} public override …

1
Castle DynamicProxy-创建涉及用作GTR的GTP的代理时失败
好吧,现在我真的很困惑。 我最初遇到了这个问题,根据发布者的说法,这是ILMerges到最新Rhino.Mocks库中的Castle.DynamicProxy版本的问题。根据有关此问题的几个权威机构的说法,它已被固定在最新的Castle中,但该图书馆尚未将其改成新的Rhino.Mocks。大多数人都说“只需下载Rhino源码和最新的Castle并构建自己的版本”。 因此,我正是这样做的;我从Ayende的GitHub上获取了Rhino中继源的ZIP,打开并构建了它。然后,像一个好的TDDer一样,我创建了一个单元测试以确保所做的更改有效(因为最新的Castle将DynamicProxy折叠到Core中,需要进行一些重要的引用更改): [Test] public void MockOfInterfaceMethodWithInterfaceGTR() { var mock = mocks.DynamicMock<ITestRestrictedInterface>(); Assert.NotNull(mock); Expect.Call(mock.TestMethod(new Object2())).IgnoreArguments().Return(5); mocks.ReplayAll(); Assert.AreEqual(5, mock.TestMethod(new Object2())); } ... internal interface ITestGenericInterface<TRest> where TRest:IObject1 { int TestMethod<T>(T input) where T : TRest; } internal interface ITestRestrictedInterface:ITestGenericInterface<IObject2> { } internal interface IObject1 { } internal interface IObject2:IObject1 { } …

1
lambda表达式中的枚举的编译方式有所不同;过载分辨率改善的结果?
尝试使用Visual Studio 2015 RC时,我收到了先前工作代码的运行时错误。给定lambda (x => x.CustomerStatusID == CustomerStatuses.Active)作为传递给函数Expression<>,调试器将显示表达式树中的差异。以前它是这样编译的: .Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x) { (System.Int32)$x.CustomerStatusID == 0 } 但是在C#6.0中,它现在编译为 .Lambda #Lambda1<System.Func`2[Services.DataClasses.CustomerDC,System.Boolean]>(Services.DataClasses.CustomerDC $x) { (System.Int32)$x.CustomerStatusID == (System.Int32).Constant<Services.DataClasses.CustomerStatuses>(Active) } 尽管对我的遍历树的代码的修复很简单,并且可以理解其他细节,但是有人知道像这样漂浮的其他陷阱吗? 或者,是否有人链接到有关如何改进重载分辨率的细节的信息?我找不到。
68 c#  lambda  enums  roslyn  c#-6.0 

5
在LINQ中向实体左加入?
我正在尝试将LINQ用于实体。 我在以下方面遇到问题:我希望它这样做: SELECT T_Benutzer.BE_User ,T_Benutzer_Benutzergruppen.BEBG_BE FROM T_Benutzer LEFT JOIN T_Benutzer_Benutzergruppen ON T_Benutzer_Benutzergruppen.BEBG_BE = T_Benutzer.BE_ID 我最接近的是: var lol = ( from u in Repo.T_Benutzer //where u.BE_ID == 1 from o in Repo.T_Benutzer_Benutzergruppen.DefaultIfEmpty() // on u.BE_ID equals o.BEBG_BE where (u.BE_ID == o.BEBG_BE || o.BEBG_BE == null) //join bg in Repo.T_Benutzergruppen.DefaultIfEmpty() // on …

12
在Java中移位位是否比乘法和除法快?。净?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 如果您恰好使用2的幂,则在大多数(甚至甚至是所有)CPU上,向左和向右移位位显然比乘法和除法运算快。但是,对于某些阅读器和某些算法,这样做可能会降低代码的清晰度。移位确实是提高性能所必需的,还是我可以期望编译器或VM注意到这种情况并对其进行优化(特别是当2的幂是文字时)?我主要对Java和.NET的行为感兴趣,但也欢迎对其他语言实现有深入的了解。

14
Environment.TickCount与DateTime.Now
可以Environment.TickCount用来计算时间跨度吗? int start = Environment.TickCount; // Do stuff int duration = Environment.TickCount - start; Console.WriteLine("That took " + duration " ms"); 因为它TickCount是经过签名的,并且会在25天后翻转(要花费50天才能全部击中32位,但是如果您想对数学有任何了解,就必须报废签名的位),这似乎太冒险了,无法使用。 我正在使用DateTime.Now。这是最好的方法吗? DateTime start = DateTime.Now; // Do stuff TimeSpan duration = DateTime.Now - start; Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");
68 c#  .net  datetime  timespan 

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.