理解得越多,需要记忆的越少

2016-10-13
ASP.NET 输出的 PDF 数据流在 Microsoft Edge 浏览器里不显示的问题

公司的 .NET Framework 3.5 Web Form 的老项目遇到个问题,就是输出的 PDF 数据流在Microsoft Edge浏览器里不显示。但在其它浏览器里就没问题。 用Google大法找到了问题的答案:“Microsoft Edge PDF inline issue” Same Issue Again.

阅读此文

2016-10-12
高性能的字节数组与十六进制字符串互相转换

方法来自 stackoverflow,注释中标明了具体的代码出处位置。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* the following methods have high performance and come from: http://stackoverflow.com/a/24343727/2753545 */

private static readonly uint[] _lookup32 = CreateLookup32();

private static uint[] CreateLookup32()
{
var result = new uint[256];
for (int i = 0; i < 256; i++)
{
string s = i.ToString("X2");
result[i] = ((uint)s[0]) + ((uint)s[1] << 16);
}
return result;
}

public static string ByteArrayToHexViaLookup32(byte[] bytes)
{
uint[] lookup32 = _lookup32;
char[] result = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++)
{
uint val = lookup32[bytes[i]];
result[2 * i] = (char)val;
result[2 * i + 1] = (char)(val >> 16);
}
return new string(result);
}

// this method is from http://stackoverflow.com/a/17923942/2753545
public static byte[] HexToByteUsingByteManipulation(string s)
{
byte[] bytes = new byte[s.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
int hi = s[i * 2] - 65;
hi = hi + 10 + ((hi >> 31) & 7);

int lo = s[i * 2 + 1] - 65;
lo = lo + 10 + ((lo >> 31) & 7) & 0x0f;

bytes[i] = (byte)(lo | hi << 4);
}
return bytes;
}
阅读此文

2016-10-09
让老C#代码支持可选参数的方法

C#是从 C# 4.0(随着 .NET Framework 4和VS 2010)开始支持可选参数的。具体来说,就是可以用C#写如下的代码:

1
2
3
4
public int Add(int a, int b = 5)
{
return a + b;
}

在这之前,通常是使用方法重载来达到相同目的:

1
2
3
4
5
6
7
8
9
public int Add(int a, int b)
{
return a + b;
}

public int Add (int a)
{
return Add(a, 5);
}

实际上,我们完全可以通过2个Attribute来达到可选参数的目的。这2个Attribute存在于System.Runtime.InteropServices命名空间,分别为:

  • OptionalAttribute
  • DefaultParameterValueAttribute

代码看起来是这样:

1
2
3
4
public int Add(int a, [Optional][DefaultParameterValue(5)]int b)
{
return a + b;
}

这2个Attribute自 .NET Framework 1.1时代就有了,惭愧我现在才知道……

阅读此文

2016-10-09
在ASP.NET Core的服务器端进行URL编码的方法

很简单,一句话使用System.NET.WebUtility类。它提供HtmlEncode, HtmlDecode, UrlEncode, UrlDecode等方法。

阅读此文

2016-10-08
将XUnit的测试结果XML文件转换为NUnit的XML文件

在配置Bamboo的时候,为了让Bamboo显示测试结果,需要让我们的XUnit将测试结果输出为XML文件,这不是问题,问题是Bamboo只支持解析NUnit格式的XML文件。那么有办法让XUnit输出NUnit格式的XML文件吗?答案是暂时没办法。但是有个替代方法,就是利用XSLT把XUnit的XML文件转换为NUnit的XML文件,为此,我们需要2样东西:

  1. 转换用的 .xslt 文件,可以从这里下载。
  2. xslt转换工具,可以用微软很久前发布的msxsl.exe

最后是相关的命令:

  • 运行测试输出XUnit的测试结果:

    dotnet test rootFolderOfTestProject -xml xunitResult.xml

  • 将XUnit的XML文件转换为NUnit的XML文件:

    msxsl.exe xunitResult.xml NUnitXml.xslt -o nunitResult.xml

阅读此文