问题标签 [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.
.net - 为什么 .NET 将字符串与字符区分开来?
字符串还不够吗?
举个例子,为什么 String 类可以让你
将 char 数组或字符串数组传递给它的Split方法?
虽然只使用字符串版本是完全有效的?
c# - UnderlyingSystemType 何时与当前 Type 实例不同
System.Type
包含一个UnderlyingSystemType
属性。MSDN指出:
指示由公共语言运行时提供的表示此类型的类型。
在大多数情况下,此属性仅返回当前Type
实例。
我的问题是,在什么情况下这个属性不返回当前Type
实例本身。在这些情况下,当前Type
实例和返回的底层系统类型是什么类型?
c# - RuntimeHelpers.GetHashCode 有什么作用
该RuntimeHelpers.GetHashCode(object)
方法允许基于对象的身份生成哈希码。MSDN状态:
RuntimeHelpers.GetHashCode 方法始终以非虚拟方式调用 Object.GetHashCode 方法,即使对象的类型已覆盖 Object.GetHashCode 方法。
但是,当Object.GetHashCode()
使用 Reflector (.NET 4.0) 检查方法时,我们将看到以下代码:
这让我相信 MSDN 文档是错误的,因为Object.GetHashCode
从内部调用RuntimeHelpers.GetHashCode(object)
会导致堆栈溢出。
那么它的实际行为是什么RuntimeHelpers.GetHashCode(object)
以及它是如何工作的呢?它是如何计算哈希的?
c# - MemoryCache 神奇地进入 Disposed 状态
我做了很多测试,我的 MemoryCache 实例在一段时间后被释放,当我调用 Get 方法时总是返回 null。我认为那是在 PollingInterval 之后。
为了模拟,您可以启动一个新的 webapp 并编写以下代码:
我将 PollingInterval 配置为 30 小时,似乎可行。
我认为可能是 AppDomain Unload,但经过一番调查,我认为不是这样:
1-) MSDN 说要为 ASP.NET 使用 MemoryCache:http: //msdn.microsoft.com/en-us/library/ff477235 (v=vs.100).aspx 并说 ASP.NET 4 缓存是用对象缓存:
在 ASP.NET 4 中,缓存是通过使用 ObjectCache 类实现的。
2-) AppDomain 卸载将重置静态变量,创建新的 MemoryCache 实例。
3-) 我像 MemoryCache 一样在 AppDomain Unload 上附加了一个事件(我看到了反编译的源代码),在我的测试中它没有被调用并且 memorycache 被处理掉了。
参考:
MSDN 论坛上的相同帖子:http: //social.msdn.microsoft.com/Forums/en/netfxbcl/thread/1233ffb3-6480-431b-94ca-1190f96cf5f6
http://social.msdn.microsoft.com/Forums/en/netfxbcl/thread/0a666d5e-9bda-47bd-8dd3-98d32eb5fe60
c# - MemoryStream 的 byte[] 缓冲区可以具有可变大小吗?
我正在将一个对象序列化为byte[]
using MemoryStream
:
有什么办法可以设置'serialized'
根据大小增长stuffToSerialize
?
c# - Enum.TryParse:当返回值为`false`时,out参数值是否有保证或约定?
根据文档Int32.TryParse
,如果该方法返回 false,它会将 out 参数设置为零。我在其文档中没有看到 Enum.TryParse 的类似保证。似乎应该有这样的保证,因为该方法必须将 out 参数设置为something,而零最有意义。
是否在其他地方指定或记录了保证,或者真的没有保证?
silverlight - 无法在 Silverlight XAML 中实例化简单 BCL 对象
如果我声明了正确的 XML 命名空间,我可以使用 Silverlight XAML 中的公共和默认构造函数创建/实例化我自己的任何类ResourceDictionary
。
但是,如果我尝试使用命名空间中基类库的任何(非 UI)类System.*
,我会收到一个错误,即找不到类型。
例如:
给我错误The type 'AesManaged' was not found because 'clr-namespace:System.Security.Cryptography;assembly=System.Core' is an unknown namespace. [Line: 12 Position: 37]
。
我很困惑,因为我认为这很容易实现。我正在使用 Visual Studio 2012 和 Silverlight 5。System.Core
程序集在我的项目中正确链接(默认情况下)。我可以在 XAML 中以不同方式声明命名空间以使其工作吗?如果是这样,怎么做?
c# - System.Drawing.Color -state 有什么价值?
System.Drawing.Color 有一个私有字段int state
,这使得相等比人们对结构的期望要复杂一些。
有谁知道它到底是干什么用的?谁,什么以及为什么设置和阅读它?
c# - 当 BigInteger 的大小超过 ¼ GB 时,BigInteger 的对数错误
当我有一个BigInteger
大小超过 2 GB(即 ¼ GB;我通过反复试验找到这个阈值)时,对数方法给出了错误的答案。这个简单的代码说明了:
当然,对于超过 的数字1
,我们必须有一个正对数,对于数字 ,我们必须有一个零对数1
,对于介于0
and之间的数字,我们必须有一个负对数1
(那里没有整数)。我的数字i1
及i2
以上的数字大于,1
因为按照惯例,当最高有效字节介于0
and之间时127
,这意味着 positive BigInteger
。
现在,如果您阅读 的文档BigInteger.Log
,他们声称如果对数“超出 Double 数据类型的范围”,它可能会抛出。现在,显然这需要一台内存容量超过1E+300
字节的计算机,而可观测的宇宙太小而无法容纳这样的计算机,所以我想这永远不会发生。
那么为什么这不起作用呢?
PS!Size over 2 ^^ 31
bits 表示 的实际值BigInteger
超过2 ^^ (2 ^^ 31)
或近似circa 8.8E+646456992
。
更新:我向 Microsoft Connect发送了错误报告。在阅读了讨论后,我也意识到,由于BigInteger
单个对象大小的设计和上限为 2 GB,aBigInteger
永远不会超过 2 GB(无论您有多少内存)。因此,当BigInteher
¼ 和 2 GB 之间时,就会发生此错误。
collections - 为什么没有HashSet实现 IReadOnlyCollection?
.NET 4.5 中新的只读接口(例如IReadOnlyCollection<T>
和IReadOnlyDictionary<TKey,TValue>
)非常有用,尤其是因为它们已在常见的 BCL 类型(例如Collection<T>
、List<T>
和Dictionary<TKey,TValue>
.
但是,HashSet<T>
并SortedSet<T>
没有升级为 implement IReadOnlyCollection<T>
,我看不出这个决定背后的逻辑,因为这些类在没有任何修改或破坏性更改的情况下与接口匹配。它只是被 BCL 团队忽略了,还是我在这里遗漏了什么?
(这特别烦人,因为没有内置方法可以将集合包装在 aIReadOnlyCollection<T>
中。确实,ReadOnlyCollection<T>
包装IList<T>
而不是ICollection<T>
。我知道编写自己的包装器是微不足道的。)