问题标签 [base-class-library]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c#-3.0 - SyncHashtable this[Object key] 不使用锁定
我经历了SyncHashtable
在.Net框架BCL中定义的实现。
此类提供对多个读取器和写入器的同步访问。
其中一种方法实现为
在我看来,get 方法还应该在访问对象之前锁定 Syncroot。
考虑以下场景:
线程 1:从Hashtable
.
线程 2:使用键读取对象。
如果线程 2 在读取对象时发生上下文切换,并且线程 1 删除了对象,那么在这种情况下,读取操作将失败或给出不一致的结果。
因此我们不能像这样实现这个方法吗
谢谢维韦克
c# - 为什么字典“未排序”?
我已阅读此内容以回答这里的许多问题。但这究竟是什么意思?
上面的代码似乎按预期工作。那么字典以什么方式被认为是无序的呢?上面的代码在什么情况下会失败?
c# - 使用 .NET 的内置类是否有显着的性能提升?
快速的小问题...
我知道有时在其他语言中,出于性能原因,库的部分代码是用特定于平台的直接 C 语言编写的。在这种情况下,您可以通过尽可能使用库代码来获得巨大的性能提升。
那么.NET 平台会这样做吗?Microsoft 对基类库的实现是否以某种我无法在托管代码中匹配的方式进行了优化?
像使用 KeyValuePair 作为类型安全的元组结构而不是自己编写的东西怎么样?
c# - 是否有内置函数可以从 BCL 中的 www.abc.com/def/ghi 获取“ghi”?
是否有内置函数可以在 BCL中获取ghi
from ?www.abc.com/def/ghi
我知道创建一个可以做到这一点的小方法非常容易,但我想知道是否已经有一些东西可以为我处理它。
如果它也能得到我def
,abc
那将是一个奖励。
.net - XElement.CreateNavigator() 和 XPathDocument().CreateNavigator() 之间的区别
以下测试失败。r1 似乎缺少尖括号,有人知道吗?我想它是某种编码错误?
据我所知,这里的问题不是语义上等价但词法上不同的 xml,而是在 r1 案例中生成的 xml 缺少它的 xml 标签。有趣的是,使用var nav3 = XElement.Load(stream).CreateReader();
效果很好。
c# - 为什么 math.Ceiling (double a) 不直接返回 int ?
msdn定义了这个方法:返回大于或等于指定双精度浮点数的最小整数。
但事实上,它是
为什么不直接返回int?微软是怎么想的?
.net - 为什么 PrincipalPermission(Attribute) 不尊重身份验证类型?
IIdentity
接口暴露AuthenticationType
了我想考虑的属性,因为如果用户使用 x509 或基本用户名/密码身份验证登录,情况会有所不同,你知道:
但我不能。此外,两者PrincipalPermission
都是PrincipalPermissionAttribute
密封的(谢谢大家),所以我无法添加我需要的功能。这是出于某种特殊原因还是仅仅是设计缺陷?任何想法如何解决?
c# - 为什么 BCL 中没有 AutoResetEventSlim?
AutoResetEventSlim
为什么BCL中没有类?
可以用它来模拟ManualResetEventSlim
吗?
c# - 将 Object.GetHashCode() 转换为 Guid
我需要为对象分配一个 guid 以在应用程序启动和关闭时管理状态看起来我可以使用将查找值存储在字典中
这里有什么潜在的问题需要注意吗?
笔记
这不需要在执行运行之间持续存在,只有这样的 guid
- 创建对象
- gethashcode(),与新的或旧的 guid 关联
在应用程序终止之前,gethashcode() 和查找 guid 以 update() 或 insert() 到持久性引擎中使用 GUID
唯一的假设是 gethashcode() 在进程运行时保持一致
还在同一对象类型上调用 gethashcode()(从窗口派生)
更新 2 - 这是更大的图景
- 在运行之间创建一个状态机来存储有关 WPF 用户控件(后来称为 UC)的信息
- 用户控件的类型可以随时间变化(添加/删除)
- 在第一次运行中,没有先前的状态,用户与 UC 的一个子集进行交互并修改他们的状态,这需要在应用程序重新启动时重新创建
- 此状态快照是在应用程序正常关闭时拍摄的
- 也可以有多个 UC 类型的实例
- 在关闭时,每个实例都被分配一个 guid 并与类型信息和状态信息一起保存
- 所有这些 guid 也存储在一个集合中
- 重新启动时,对于每个 guid,创建对象,存储 ref/guid,恢复每个实例的状态,以便应用程序看起来与以前完全相同
- 用户可以添加或删除 UC 实例/类型,并以其他方式与系统交互
- 关机时,再次保存状态
- 此时的选择是删除/删除所有先前的状态并将新的状态信息插入持久层(sql db)
- 随着时间的推移观察/分析,事实证明许多实例保持一致/静态并且不会改变 - 因此它们的状态不需要再次删除/插入,因为状态信息现在非常大并且存储在非本地数据库中
- 所以只保留更改增量
- 要计算增量,需要跟踪参考生命周期
- 当前存储为
List<WeakReference>
启动时 - 关机时,遍历此列表和屏幕上的实际 UC,相应地添加/更新/删除键
- 将增量发送到持久性
希望以上说明清楚。
所以现在的问题是 - 为什么不只存储 HashCode (仅限用户控件)而不是WeakReference
在遍历列表时消除空引用的测试
更新 3 - 谢谢大家,最后要使用弱引用
c# - .NET/BCL 源代码中“string.Empty”上方令人困惑的注释的含义?
我试图理解为什么string.Empty
是readonly
而不是const
. 我看到了这篇文章,但我不明白微软对此发表的评论。正如 Jon Skeet在评论中所写的那样: “我不知道——老实说,这对我来说没有多大意义……”
共享源公共语言基础结构 2.0 版本。string.cs 在 sscli20\clr\src\bcl\system\string.cs
我在这里看不到任何 String 构造函数调用,此外,它被标记为文字 - “”
有人可以用纯文本解释我,评论是什么意思,为什么是string.Empty
readonly
而不是const
?
更新:
Eric Lippert现在评论了一个已删除的答案:
我在午餐时问了一位 C# 老前辈,他没有具体回忆为什么会做出这个决定,但推测这与实习有关。