标签: base-class-library

在.NET/BCL源代码中混淆注释"string.Empty"的含义?

我试图理解为什么string.Emptyreadonly和不是const.我看过这篇帖子,但我不明白微软写的关于它的评论.正如Jon Skeet 在评论中所写的那样"我不知道 - 对我来说这没有多大意义,说实话......"

共享源公共语言基础结构2.0版本.string.cs位于sscli20\clr\src\bcl\system\string.cs中

// The Empty constant holds the empty string value.
//We need to call the String constructor so that the compiler doesn't mark this as a literal.
//Marking this as a literal would mean that it doesn't show up as a field which we can access 
//from native.
public static readonly String Empty = ""; 
Run Code Online (Sandbox Code Playgroud)

我在这里看不到任何String构造函数调用,而且,它被标记为文字 - ""

有人可以用明文解释我,评论意味着什么,为什么string.Empty readonly不是const …

.net c# compiler-construction string base-class-library

33
推荐指数
1
解决办法
2082
查看次数

从BitArray转换为Byte

我有一个BitArray长度为8,我需要一个函数将其转换为byte.怎么做?

具体来说,我需要一个正确的功能ConvertToByte:

BitArray bit = new BitArray(new bool[]
{
    false, false, false, false,
    false, false, false, true
});

//How to write ConvertToByte
byte myByte = ConvertToByte(bit);
var recoveredBit = new BitArray(new[] { myByte });
Assert.AreEqual(bit, recoveredBit);
Run Code Online (Sandbox Code Playgroud)

.net c# binary bitarray base-class-library

31
推荐指数
5
解决办法
8万
查看次数

为什么BCL中没有AutoResetEventSlim?

为什么AutoResetEventSlimBCL 没有班级?

可以使用模拟ManualResetEventSlim吗?

.net c# multithreading base-class-library c#-4.0

31
推荐指数
2
解决办法
4529
查看次数

30
推荐指数
3
解决办法
4万
查看次数

为什么.NET中没有SortedList <T>?

为什么只有一个SortedList<TKey, TValue>看起来更像是字典,但SortedList<T>实际上只是一个总是排序的列表?

根据有关SortedList的MSDN文档,它实际上是在内部实现为动态大小的数组KeyValuePair<TKey, TValue>,始终按键排序.作为任何类型的列表,同一个类不会更有用T吗?那个名字也不合适吗?

.net sortedlist base-class-library

29
推荐指数
3
解决办法
1万
查看次数

安装nuget包"已经添加了相同的密钥."

我正在尝试安装Microsoft.Bcl.Build 1.0.14

努特回归

Installing 'Microsoft.Bcl.Build 1.0.14'. Successfully installed 'Microsoft.Bcl.Build 1.0.14'. Adding 'Microsoft.Bcl.Build 1.0.14' to LeadTracker.Calendar. Uninstalling 'Microsoft.Bcl.Build 1.0.14'. Successfully uninstalled 'Microsoft.Bcl.Build 1.0.14'. Install failed. Rolling back... An item with the same key has already been added.
Run Code Online (Sandbox Code Playgroud)

这也发生在json.net和其他软件包上.

我可以添加nancy和topshelf但不能添加json.net和bcl.

我在VS2012和2013中尝试过它.我也尝试卸载nuget并重新安装.我也尝试将nuget添加到空类库和空控制台应用程序中.始终返回相同的错误.

这也发生在json.net和其他软件包上.

我也试过没有包文件

任何想法最受赞赏.

这是命令和堆栈跟踪

PM> Install-Package Microsoft.Bcl.Build Installing 'Microsoft.Bcl.Build 1.0.14'. You are downloading Microsoft.Bcl.Build from Microsoft, the license agreement to which is available at http://go.microsoft.com/fwlink/?LinkId=329770. Check the package for additional dependencies, which may come with their own license agreement(s). Your use …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio base-class-library nuget

27
推荐指数
4
解决办法
2万
查看次数

为什么Convert.ToInt32(Int32)存在?

有过载Convert.ToInt32的是采用Int32作为参数.但即使文档说基本没有任何反应,该方法返回其输入.

问题是为什么我们有这样的超负荷?有什么目的吗?谁能给我一个使用这种方法的例子?

我的想法:我认为我们可能拥有它,因为有一个重载需要Object.因此我们想要消除拳击等.但我不确定.

.net c# base-class-library

25
推荐指数
2
解决办法
1045
查看次数

数学解释为什么Decimal转换为Double并且Decimal.GetHashCode分隔相等的实例

我不确定这种说明Stack Overflow问题的非标准方式是好还是坏,但是这里是:

什么是最好的(数学或其他技术)解释为什么代码:

static void Main()
{
  decimal[] arr =
  {
    42m,
    42.0m,
    42.00m,
    42.000m,
    42.0000m,
    42.00000m,
    42.000000m,
    42.0000000m,
    42.00000000m,
    42.000000000m,
    42.0000000000m,
    42.00000000000m,
    42.000000000000m,
    42.0000000000000m,
    42.00000000000000m,
    42.000000000000000m,
    42.0000000000000000m,
    42.00000000000000000m,
    42.000000000000000000m,
    42.0000000000000000000m,
    42.00000000000000000000m,
    42.000000000000000000000m,
    42.0000000000000000000000m,
    42.00000000000000000000000m,
    42.000000000000000000000000m,
    42.0000000000000000000000000m,
    42.00000000000000000000000000m,
    42.000000000000000000000000000m,
  };

  foreach (var m in arr)
  {
    Console.WriteLine(string.Format(CultureInfo.InvariantCulture,
      "{0,-32}{1,-20:R}{2:X8}", m, (double)m, m.GetHashCode()
      ));
  }

  Console.WriteLine("Funny consequences:");
  var h1 = new HashSet<decimal>(arr);
  Console.WriteLine(h1.Count);
  var h2 = new HashSet<double>(arr.Select(m => (double)m));
  Console.WriteLine(h2.Count);
}
Run Code Online (Sandbox Code Playgroud)

给出以下"有趣"(显然不正确)的输出:

42                              42                  40450000
42.0                            42                  40450000
42.00                           42                  40450000 …

.net c# floating-point decimal base-class-library

23
推荐指数
2
解决办法
592
查看次数

.NET 4.0中的CallerMemberName无法正常工作

我试图CallerMemberName通过BCL可移植包在.NET 4.0中使用属性.它总是返回一个空字符串而不是成员名称.我究竟做错了什么?

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        MessageBox.Show(new class2().CallMe);
    }
}

public class class2
{
    public string CallMe 
    {
        get
        {
            return HelpMe();
        }
    }

    private string HelpMe([CallerMemberName] string param = "")
    {
        return param;
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# .net-4.0 base-class-library callermembername

22
推荐指数
3
解决办法
2万
查看次数

RuntimeHelpers.GetHashCode做了什么

RuntimeHelpers.GetHashCode(object)方法允许基于对象的身份生成哈希码.MSDN 声明:

RuntimeHelpers.GetHashCode方法始终非虚拟地调用Object.GetHashCode方法,即使对象的类型已重写Object.GetHashCode方法.

[MethodImpl(MethodImplOptions.InternalCall)]
[SecuritySafeCritical]
public static extern int GetHashCode(object o);
Run Code Online (Sandbox Code Playgroud)

但是,在Object.GetHashCode()使用Reflector(.NET 4.0)检查方法时,我们将看到以下代码:

public virtual int GetHashCode()
{
    return RuntimeHelpers.GetHashCode(this);
}
Run Code Online (Sandbox Code Playgroud)

这让我相信MSDN文档是错误的,因为Object.GetHashCode从内部调用RuntimeHelpers.GetHashCode(object)会导致堆栈溢出.

那么它的实际行为是什么RuntimeHelpers.GetHashCode(object)以及它是如何工作的?它是如何计算哈希值的?

.net c# clr base-class-library

21
推荐指数
2
解决办法
2935
查看次数