我在.NET中有一个字符串,实际上是一个网址.我想要一种简单的方法来从特定参数中获取值.
通常,我只是使用Request.Params["theThingIWant"],但这个字符串不是来自请求.我可以Uri像这样创建一个新项目:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Run Code Online (Sandbox Code Playgroud)
我可以myUri.Query用来获取查询字符串......但是我显然必须找到一些分解它的regexy方法.
我是否遗漏了一些明显的东西,或者没有内置的方法来创建某种类型的正则表达式等等?
我遵循这条规则,但我的一些同事不同意它,并认为如果一个类较小,它可以与其他类保留在同一个文件中.
我一直听到的另一个论点是"即使微软不这样做,我们为什么要这样做?"
对此有何普遍共识?是否有应避免的情况?
好的我喜欢Python的zip()功能.一直使用它,它很棒.现在每一次我想要做的相反zip(),认为"我以前就知道该怎么做",然后谷歌蟒蛇解压缩,然后记住一个使用这个神奇的*解压缩元组的压缩列表.像这样:
x = [1,2,3]
y = [4,5,6]
zipped = zip(x,y)
unzipped_x, unzipped_y = zip(*zipped)
unzipped_x
Out[30]: (1, 2, 3)
unzipped_y
Out[31]: (4, 5, 6)
Run Code Online (Sandbox Code Playgroud)
到底是怎么回事?那个神奇的星号在做什么?还有什么地方可以应用,Python中其他令人惊叹的精彩内容是如此神秘且难以谷歌?
代码样式问题在这里.
我看了一下这个问题,询问.NET CLR是否真的总是初始化字段值.(答案是肯定的.)但令我感到震惊的是,我不确定让它做到这一点总是一个好主意.我的想法是,如果我看到这样的声明:
int myBlorgleCount = 0;
Run Code Online (Sandbox Code Playgroud)
我有一个很好的想法,程序员希望计数从零开始,并且可以,至少在不久的将来.另一方面,如果我只是看到:
int myBlorgleCount;
Run Code Online (Sandbox Code Playgroud)
如果0是合法或合理的值,我没有真正的直接想法.如果程序员刚开始阅读和修改它,我不知道程序员是否打算在设置值之前开始使用它,或者他们是否期望它为零等等.
另一方面,一些相当聪明的人和Visual Studio代码清理实用程序告诉我删除这些冗余声明.对此有何普遍共识?(有共识吗?)
我将此标记为语言不可知,但是如果有一个奇怪的情况,那么特别好的想法是针对特定语言的反对,这可能值得指出.
编辑:虽然我确实认为这个问题与语言无关,但它显然不适用于像C这样没有进行值初始化的语言.
编辑:我很欣赏约翰的回答,但这正是我不想要的.我知道.NET(或Java或其他)将完成这项工作并一致且正确地初始化值.我所说的是,如果我看到代码修改了之前未在代码中明确设置的值,我作为代码维护者,不知道原始编码器是否意味着它是默认值,或者只是忘记设置值,或者期望将其设置在其他地方,等等.
背景:我有一堆字符串,我从数据库中获取,我想返回它们.传统上,它会是这样的:
public List<string> GetStuff(string connectionString)
{
List<string> categoryList = new List<string>();
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
string commandText = "GetStuff";
using (SqlCommand sqlCommand = new SqlCommand(commandText, sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlConnection.Open();
SqlDataReader sqlDataReader = sqlCommand.ExecuteReader();
while (sqlDataReader.Read())
{
categoryList.Add(sqlDataReader["myImportantColumn"].ToString());
}
}
}
return categoryList;
}
Run Code Online (Sandbox Code Playgroud)
但后来我认为消费者想要遍历这些项目而不关心其他的东西,而且我不想将自己打包到List中,所以如果我返回一个IEnumerable一切都很好/灵活.所以我在想我可以使用"yield return"类型设计来处理这个......就像这样:
public IEnumerable<string> GetStuff(string connectionString)
{
using (SqlConnection sqlConnection = new SqlConnection(connectionString))
{
string commandText = "GetStuff";
using (SqlCommand sqlCommand = new SqlCommand(commandText, sqlConnection))
{
sqlCommand.CommandType = CommandType.StoredProcedure;
sqlConnection.Open();
SqlDataReader sqlDataReader …Run Code Online (Sandbox Code Playgroud) 我目前遇到了单选按钮和分组的问题.我在转发器控件中有一个asp单选按钮.我将组名属性设置为"客户".页面加载时,单选按钮不会分组.它不是将id字段设置为组名,而是设置单选按钮的值字段.我知道我已经尝试在转发器控件之外设置单选按钮并且遇到了同样的问题.这里发生了什么?
ASPX
<asp:Repeater ID="repCustomers" runat="server">
<HeaderTemplate>
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:RadioButton ID="radCustomer" GroupName="Customer" runat="server" ValidationGroup="Customer" ToolTip='<%#Eval("CustomerNumber") %>' />
</td>
<td><%#Eval("CustomerNumber")%></td>
<td><%#Eval("Name") %></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
Run Code Online (Sandbox Code Playgroud)
输出html
<table class="tableDefault" cellpadding="0" cellspacing="0" border="0" style="width: 383px; border: 0px !important">
<tr>
<th> </th>
<th>Cust. No.</th>
<th>Cust. Name</th>
</tr>
<tr>
<td>
<span title="111111"><input id="ctl00_PrimaryContent_repCustomers_ctl01_radCustomer" type="radio" name="ctl00$PrimaryContent$repCustomers$ctl01$Customer" value="radCustomer" /></span>
</td>
<td>111111</td>
<td>Jeremy's Test</td>
</tr>
<tr>
<td>
<span …Run Code Online (Sandbox Code Playgroud) 我们如何检测有向图是否是循环的?我认为使用广度优先搜索,但我不确定.有任何想法吗?
这个问题的一个分拆/进化这个问题.(那个问题被标记为已经解决了,因为我对它提出了一个赏金并且它自动解决了,但它从未得到过真正的回答.)
摘要是这样的:我们有一个ASP.NET站点.有时候,当客户要求奇怪的网址时,我们会收到错误.根据客户端要求的资源,看起来html源中缺少4k块文本.
一个简单的例子......如果我们有一个看起来像这样的页面:
<a href="myValidLink.aspx">Here's some text</a>
a bunch more stuff
...(a large block of text)...
AND NOW MORE STUFF LATER
Run Code Online (Sandbox Code Playgroud)
客户可能会要求提供网址:"myValidLiORE%20STUFF%20LATER".
它就好像html源的一部分不在那里......而那个缺失的部分似乎正好是4KB(4096字节)长(或根据某些人,有时是1KB?).
不幸的是,我们无法按需复制此错误,但我们每天都会看到它多次来自客户端.
起初我们认为这是Webresource.axd的一个问题,因为我们碰巧在那里看到了很多......但现在我认为这主要是因为我们将类似的错误归为一类,并且当发生损坏时这些错误往往会发生在那个特定的地区.现在我正在研究更广泛的问题,我看到的地方我们得到了非常不同的错误,看起来它们是由同样的辍学问题造成的.
我们已经在IE 8中看到了很多,并且随着IE 8变得越来越流行,它变得越来越频繁.我们偶尔会看到它自称为IE 7的浏览器......如果IE 8进入"兼容模式",IE 8将会这样做.
我的理论,在这一点上(我试图找到一种测试方法)是Web服务器正确地发送字节流中的所有数据......并且浏览器IE 8有问题,并在某些条件下删除它的内存页(4k).
然而,我有点担心这个理论,因为显然有些人报告说这种"偶尔"使用IE 6或FF 3 ......这些往往是异常值,可能只是具有类似症状的不同问题,但如果这些浏览器真的是一样的东西,这会让我的理论脱离水面.不过,我现在还没有更好的主意.
我所拥有的另一个想法可能是服务器上相对较新的服务包导致向客户端提供的数据出现问题,偶尔会丢失4KB.这个理论的问题在于它没有解释IE8上错误的优势,以及其他客户端浏览器上的错误.
所以这些问题最终会得到答案:
简而言之,我希望有人能够点击链接,并获得一次性使用的pdf.我们有库来创建PDF文件,所以这不是问题.
我们可以生成指向aspx页面的链接,让该页面生成pdf,将pdf保存到文件系统,然后将Response.Redirect保存到保存的pdf.然后我们必须以某种方式跟踪和清理PDF文件.
由于我们不需要保留这些数据,如果可能的话,我想做的是让aspx页面生成pdf,并将其作为对原始请求的响应直接提供.这可能吗?
(在我们的例子中,我们正在使用C#,我们希望提供pdf,但似乎任何解决方案都可能适用于各种.NET语言并返回文件类型.)
在浏览Chrome时,我注意到它在呈现页面方面反应非常快(与我的笔记本电脑上的IE和Firefox相比),包括像gmail这样的JavaScript重量级网站.
这就是Chrome上googlebook所说的内容
所有这些听起来都很熟悉,微软长期以来一直在做这些事情.Windows os,C++,C#等编译器,CLR等等.
那么为什么微软或任何其他浏览器供应商都没有采用Chrome的方法呢?Chrome的方法有缺陷吗?如果没有,是否有其他浏览器供应商社区没有意识到Google的方法?