小编Boa*_*oaz的帖子

如何在C#中为URL构建查询字符串?

从代码调用Web资源时的常见任务是构建查询字符串以包含所有必需参数.虽然无论如何都没有火箭科学,但是你需要注意一些漂亮的细节,&如果不是第一个参数,编码参数等.

这样做的代码非常简单,但有点单调乏味:

StringBuilder SB = new StringBuilder();
if (NeedsToAddParameter A) 
{ 
  SB.Append("A="); SB.Append(HttpUtility.UrlEncode("TheValueOfA")); 
}

if (NeedsToAddParameter B) 
{
  if (SB.Length>0) SB.Append("&"); 
  SB.Append("B="); SB.Append(HttpUtility.UrlEncode("TheValueOfB")); }
}
Run Code Online (Sandbox Code Playgroud)

这是一个常见的任务,人们期望实用程序类存在,使其更加优雅和可读.扫描MSDN,我找不到一个 - 这让我想到了以下问题:

你知道做上述事情最干净的方式是什么?

.net c# url query-string

459
推荐指数
18
解决办法
31万
查看次数

(lambda)函数闭包捕获了什么?

最近我开始玩Python,我遇到了一些特殊的闭包方式.请考虑以下代码:

adders=[0,1,2,3]

for i in [0,1,2,3]:
   adders[i]=lambda a: i+a

print adders[1](3)
Run Code Online (Sandbox Code Playgroud)

它构建了一个简单的函数数组,它接受单个输入并返回由数字添加的输入.函数在for循环中构造,迭代器i从中循环03.对于这些数字中的每一个,lambda都会创建一个函数i,该函数捕获并将其添加到函数的输入中.最后一行将第二个lambda函数3作为参数调用.令我惊讶的是输出结果是6.

我期待一个4.我的理由是:在Python中,一切都是一个对象,因此每个变量都是指向它的指针.在创建lambda闭包时i,我希望它存储一个指向当前指向的整数对象的指针i.这意味着当i分配一个新的整数对象时,它不应该影响先前创建的闭包.遗憾的是,adders在调试器中检查数组表明它确实存在.所有的lambda功能指的最后一个值i,3,这将导致adders[1](3)返回6.

这让我想知道以下内容:

  • 闭包捕获的内容是什么?
  • 什么是最优雅的方式来说服lambda函数以更改其值i时不会受到影响的方式捕获当前i值?

python lambda closures

237
推荐指数
5
解决办法
4万
查看次数

在python中将float转换为整数的最安全方法?

Python的数学模块包含像floor&这样的便捷函数ceil.这些函数采用浮点数并返回低于或高于它的最接近的整数.但是,这些函数将答案作为浮点数返回.例如:

import math
f=math.floor(2.3)
Run Code Online (Sandbox Code Playgroud)

现在f返回:

2.0
Run Code Online (Sandbox Code Playgroud)

从这个浮点数中获取整数的最安全的方法是什么,而不存在舍入错误的风险(例如,如果浮点数相当于1.99999),或者我应该完全使用另一个函数?

python math integer python-2.x

192
推荐指数
7
解决办法
56万
查看次数

阵列与列表的性能

假设您需要有一个需要经常迭代的整数列表/数组,我的意思是非常频繁.原因可能有所不同,但它说它是高容量处理的最内循环的核心.

通常,由于其大小的灵活性,人们会选择使用列表(列表).最重要的是,msdn文档声称列表在内部使用数组,并且应该执行速度快(使用Reflector快速查看确认这一点).不用说,有一些开销.

有没有人真正测量过这个?通过列表迭代6M次与阵列相同的时间?

.net arrays generics performance list

181
推荐指数
5
解决办法
15万
查看次数

如何将List <T>初始化为给定大小(而不是容量)?

.NET提供了一个通用列表容器,其性能几乎相同(请参阅阵列性能与列表问题).但是它们在初始化方面完全不同.

使用默认值很容易初始化数组,根据定义,它们已经具有一定的大小:

string[] Ar = new string[10];
Run Code Online (Sandbox Code Playgroud)

这允许人们安全地分配随机项目,比如说:

Ar[5]="hello";
Run Code Online (Sandbox Code Playgroud)

列表事情更棘手.我可以看到两种方法进行相同的初始化,这两种方式都不是你所谓的优雅:

List<string> L = new List<string>(10);
for (int i=0;i<10;i++) L.Add(null);
Run Code Online (Sandbox Code Playgroud)

要么

string[] Ar = new string[10];
List<string> L = new List<string>(Ar);
Run Code Online (Sandbox Code Playgroud)

什么是更干净的方式?

编辑:到目前为止的答案是指容量,这不是预先填充列表.例如,在刚创建的容量为10的列表中,无法做到L[2]="somevalue"

编辑2:人们想知道为什么我想以这种方式使用列表,因为它不是他们打算使用的方式.我可以看到两个原因:

  1. 人们可以非常有说服力地认为列表是"下一代"阵列,增加灵活性几乎不会受到惩罚.因此,默认情况下应该使用它们.我指出它们可能不那么容易初始化.

  2. 我目前正在编写的是一个基类,它提供默认功能作为更大框架的一部分.在我提供的默认功能中,List的大小在高级中是已知的,因此我可以使用数组.但是,我想为任何基类提供动态扩展它的机会,因此我选择了一个列表.

.net c# generics initialization list

99
推荐指数
9
解决办法
17万
查看次数

Int到C#中的Char

在Int处于有效值范围内的情况下,将Int值转换为Utf16中相应Char的最佳方法是什么?

c# casting

88
推荐指数
3
解决办法
24万
查看次数

什么是.NET最好的Twitter API包装器/库?

我正在寻找一种以编程方式为.NET应用程序生成twitter feed的方法.有关twitter api好包装的任何建议,以便轻松完成工作吗?

波阿斯

.net api twitter

53
推荐指数
5
解决办法
4万
查看次数

如何在.NET中使用XmlWriter创建XmlDocument?

许多.NET函数使用XmlWriter输出/生成xml.输出到文件/字符串/内存是一个非常的操作:

XmlWriter xw = XmlWriter.Create(PutYourStreamFileWriterEtcHere);
xw.WriteStartElement("root");
...
Run Code Online (Sandbox Code Playgroud)

有时,您需要操作生成的Xml,因此需要将其加载到XmlDocument中,或者由于某些其他原因可能需要XmlDocument,但您必须使用XmlWriter生成XML.例如,如果您调用第三方库中的函数,该函数仅输出到XmlWriter.

您可以做的一件事是将xml写入字符串,然后将其加载到XmlDocument中:

StringWriter S = new StringWriter();
XmlWriter xw = XmlWriter.Create(S);
/* write away */
XmlDocument xdoc = new XmlDocument();
xdoc.LoadXml(S.ToString());
Run Code Online (Sandbox Code Playgroud)

但是这效率很低 - 首先将所有xml信息序列化为字符串,然后再次解析字符串以创建DOM.

如何指出XmlWriter直接构建XmlDocument?

.net xmldocument xmlwriter

47
推荐指数
3
解决办法
7万
查看次数

性能计数器的性能如何?

当考虑使用性能计数器作为我公司的基于.NET的站点时,我想知道使用它们的开销有多大.

我想让我的网站不断更新它的计数器,还是我最好只做我测量的时候?

performance performancecounter

43
推荐指数
4
解决办法
1万
查看次数

如何在Delphi字符串中转义字符

Delphi字符串使用单引号,例如' a valid string'.如何'在文字字符串中指定字符?如何引用空字节(Unicode代码点U+0000)?

delphi string escaping literals

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