小编Iai*_*ser的帖子

使用链接标记或样式标记导入CSS更好吗?

或者这仅仅是个人喜好的事情?我得到的是,使用这两种方法有什么特别的好处吗?

<link href="main.css" rel="stylesheet" type="text/css">
Run Code Online (Sandbox Code Playgroud)

<style type="text/css">
@import url('main.css');
</style>
Run Code Online (Sandbox Code Playgroud)

html css performance

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

深层嵌套词典是反模式吗?

我有一个结构可以使用三深嵌套字典很容易地表示,就像这样

private static Dictionary<string, Dictionary<string, Dictionary<string,string>>> PrerenderedTemplates;
Run Code Online (Sandbox Code Playgroud)

结构可能会像这样使用

PrerenderedTemplates[instanceID][templategroup][templatepart]
Run Code Online (Sandbox Code Playgroud)

现在,我意识到这段代码很难阅读,因为通过查看定义语句,你无法分辨出它的用途.我可以真正看到改变它的唯一优势Dictionary<string, PrerenderedTemplate>是可读性.将每个嵌套转换为自己的类(例如class PrerenderedTemplate{} class TemplateGroup{} class TemplatePart{})将为很少(如果有的话)计算优势添加更多代码行.据我所知.

  • 那么,我的方法是"好的"还是应该加倍努力并创建单独的课程?
  • 是否可以覆盖嵌套Dictionary在文档/注释中的工作方式
  • 是否有处理这种嵌套的最佳实践?
  • 请记住,这是一个私人成员,对于使用该类的人来说,它不需要直截了当.

更新

所以,受Reza的启发,但无法使用Tuples,我决定创建自己的密钥生成器并实现他的模式:

private Dictionary<string, string> PrerenderedTemplates;
private string GetPrerenderedTemplateKey(string InstanceId, string FeatureId, string OptionId)
{
    return new StringBuilder(instanceId)
    .Append(FormatTools.LIST_ENTRY_DELIMITER)
    .Append(templategroup)
    .Append(FormatTools.LIST_ENTRY_DELIMITER)
    .Append(templatepart).ToString();
}
Run Code Online (Sandbox Code Playgroud)

FormatTools.LIST_ENTRY_DELIMITERUnicode专用字符在哪里0xe04d.

c# oop dictionary data-structures

17
推荐指数
1
解决办法
2077
查看次数

我的控件是"这里不允许,因为它没有扩展类'System.Web.UI.UserControl'"

所以我还有另一个面条(对我而言).

我正在尝试在CMS中创建自己的自定义控件我只有部分源代码(即供应商提供给我的样本).基本上我已经创建了一个名为DataDefinitionContentextends 的类ControlBase.现在,从我从元数据中获取的东西,ControlBase扩展UserControl,所以我会认为这将没有戏剧性.任何人都可以解释为什么这可能不适合我?


我的课:

public partial class DataDefinitionContent : ControlBase, ICustomControl<DataDefinition>
{
... Stuff
}
Run Code Online (Sandbox Code Playgroud)

ControlBase:

using System;
using System.Web.UI;
namespace CMS.Web
{
    public class ControlBase : UserControl
    {
    ... Stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ascx文件:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DataDefinitionContent.ascx.cs"
    Inherits="CMS.Admin.WebUI.CustomControls.DataDefinitionContent, CoA.Admin.WebUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" %>
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

解析器错误消息:此处不允许使用'CMS.Admin.WebUI.CustomControls.DataDefinitionContent,CoA.Admin.WebUI,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null',因为它不扩展类'System.Web. UI.UserControl".

第1行:<%@ Control Language ="C#"AutoEventWireup ="true"CodeBehind ="DataDefinitionContent.ascx.cs"

c# user-controls custom-controls extend

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

"is"表达式的结果在运行时返回false,但在检查时为true

我有以下代码.CustomControlHelper通过反射生成对象的实例.在这个阶段,我们不知道我们正在处理什么类型的对象.我们知道它会是一个CustomControl,但我们不知道它是否实现了任何特定的接口,或者它是否扩展了任何其他类.以下代码尝试确定加载的控件是否实现IRichAdminCustomControl接口.

Object obj = CustomControlHelper.GetControl(cc.Id, cc.ControlClass);            
if(obj != null)
{
    bool isWhatWeWant = (obj is IRichAdminCustomControl);
    return isWhatWeWant;
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,但我注意到,当我知道我有一个实现的对象时,IRichAdminCustomControl表达式的计算结果为false.

好吧,这就是它变得非常奇怪的地方.如果我在调试时检查代码,表达式的计算结果为true,但是如果我立即让代码运行并检查结果,则计算结果为false(我在下面附加了一个动画gif来说明).

在此输入图像描述

有没有人像以前那样遇到过这样的奇怪现象,如果有的话,究竟是什么导致了它呢?

顺便说一句,我相信我使用的产品使用Spring.NET在CustomControlHelper中提供依赖注入.

.net c# spring

14
推荐指数
2
解决办法
166
查看次数

为什么不再有像pecl_http这样的PECL扩展的Windows二进制文件?

我正在开发一个在Windows上运行的PHP项目,能够使用pecl_http而不是使用cURL并重新发明轮子以便做pecl扩展就像解析头文件所做的所有很酷的事情一样非常方便等等.

我读到的所有地方(包括PHP站点)都是pecl_http的Windows二进制文件不再与任何PHP安装打包在一起.我无法找到任何解释为什么不在任何地方.此外,http://pecl4win.php.net/已经失效多年了,我只能假设pecl4win项目已经死了.

有没有人知道发生了什么的故事,如果有一个很好的替代pecl_http,我可以在WIMP环境中运行?

php wamp http pecl wimp

11
推荐指数
1
解决办法
2万
查看次数

如何以澳大利亚(即英国)格式制作strtotime解析日期:dd/mm/yyyy?

我无法相信我以前从未遇到过这个.

基本上,我正在解析人工创建的文本文档中的文本,我需要解析的一个字段是日期和时间.因为我在澳大利亚,日期格式化,dd/mm/yyyystrtotime只想将其解析为美国格式的日期.此外,爆炸式的/方法并不奏效,因为正如我所提到的,这些文件是手工打印的,其中一些是采用的形式d M yy.

我尝试了多种组合,setlocale但无论我尝试什么,语言总是设置为美国英语.

我相当确定setlocale是关键,但我似乎无法找到正确的代码.试过这些:

  • AU
  • AU-EN
  • EN_AU
  • 澳大利亚
  • AUS

还有什么我可以尝试的吗?

为清楚起见:我在带有Windows框的IIS上运行.

非常感谢 :)

伊恩

例:

$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
Run Code Online (Sandbox Code Playgroud)

产生

2 September 2010 14:00
Run Code Online (Sandbox Code Playgroud)

我想要它产生:

9 February 2010 14:00
Run Code Online (Sandbox Code Playgroud)

我的解决方案

我在这里给出了一个答案,因为它是一个比我更容易理解的解决方案,但这就是我想出来的:

$DateTime = "9/02/10 2.00PM";
$USDateTime = preg_replace('%([0-3]?[0-9]{1})\s*?[\./ ]\s*?((?:1[0-2])|0?[0-9])\s*?[./ ]\s*?(\d{4}|\d{2})%', '${2}/${1}/${3}', $DateTime);  
echo date('j F Y H:i',strtotime($USDateTime));
Run Code Online (Sandbox Code Playgroud)

因为我不能依赖用户与他们的日期条目保持一致,所以我的正则表达式更加复杂:

  • 0到1之间的0或1位数
  • 0到9之间的1位数 - 是的,这将匹配37作为有效日期,但我认为正则表达式已经够大了!
  • 可能是一些空白
  • 分隔字符('.','/'或'')
  • 可能是一些空白
  • 或者:
    • 10到12之间的数字OR
    • 1到9之间的数字,可选前导0
  • 可能是一些空白
  • 分隔字符('.','/'或'')
  • 可能是一些空白
  • 或者: …

php datetime locale date strtotime

11
推荐指数
1
解决办法
8103
查看次数

我需要使用http重定向代码302或307吗?

假设我的网站上有一个页面显示当月的媒体发布
http://www.mysite.com/mediareleases.aspx

由于进入*的原因很简单,因此必须为此页面提供一个查询字符串,其中包含当月的当前日期,以便生成此列表:
http://www.mysite.com/mediareleases.aspx?prevDays=18

因此我需要重定向客户端请求http://www.mysite.com/mediareleases.aspxhttp://www.mysite.com/mediareleases.aspx?prevDays=whateverDayOfTheMonthItIs

我的问题是,如果我想谷歌索引没有查询参数的页面,我应该使用状态代码302或307来执行重定向吗?

两者都表明页面已经"暂时"移动 - 这就是我想要的,因为如果你理解我的话,页面每天都会"移动".

[*]我正在使用闭源.NET CMS的一个功能,所以我的双手并列.

seo search redirect search-engine http

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

在运行代码之前,可以在锁之前和之内"仔细检查"吗?

在使用线程安全时,我发现自己总是在执行锁定块中的代码之前"仔细检查",我想知道我是否正在做正确的事情.考虑以下三种做同样事情的方法:

例1:

private static SomeCollection MyCollection;
private static Object locker;
private void DoSomething(string key)
{
    if(MyCollection[key] == null)
    {
         lock(locker)
         {
              MyCollection[key] = DoSomethingExpensive(); 
         }
    }
    DoSomethingWithResult(MyCollection[key]);
}
Run Code Online (Sandbox Code Playgroud)

例2:

private static SomeCollection MyCollection;
private static Object locker;
private void DoSomething(string key)
{
    lock(locker)
    {
         if(MyCollection[key] == null)
         {
              MyCollection[key] = DoSomethingExpensive(); 
         }
    }
    DoSomethingWithResult(MyCollection[key]);
}
Run Code Online (Sandbox Code Playgroud)

例3:

private static SomeCollection MyCollection;
private static Object locker;
private void DoSomething(string key)
{
    if(MyCollection[key] == null)
    {
        lock(locker)
        {
             if(MyCollection[key] == null)
             {
                  MyCollection[key] …
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

10
推荐指数
1
解决办法
1123
查看次数

在VS2008中,有没有办法自动"附加到进程"?

我正在开发一个有三个项目的解决方案,所有这些项目都在我开始调试时运行.这很烦人,因为如果我想调试一个不是我的启动项目的特定项目的一个方面,我必须每次都附加该过程.

有没有办法让调试器自动附加到所有项目?

谢谢你的帮助 :)

干杯

伊恩

c# debugging visual-studio-2008 visual-studio

6
推荐指数
1
解决办法
489
查看次数

如何调试通过Assembly.Load(byte [])加载的程序集?

我正在为使用加载插件DLL的产品创建一个插件Assembly.Load(byte[]).这一切都非常好,但这意味着我没有传统的加载调试符号的方法来逐步执行我的代码.

疯狂的是,几个月前我遇到了完全相同的问题并解决了它 - 男孩为我自己感到骄傲!所以我知道它可以做到,我只是忘记了怎么做!

对于我可能尝试过的事情,我有一些模糊的记忆,但我无法从头脑中挑逗细节:

  • .NET Reflector
    • 可能是错误的,因为我清楚地记得踩过原始的.cs文件
  • 使用IIS Express而不是Cassini
    • 但这让我觉得这是一个奇怪的解决方案 - 程序集是从一个字节数组加载的,因此框架对DLL的来源或者如果看到一个适当的PDB可能是什么样的一无所知.此问题应存在于任何环境中.
  • 通过"模块"窗口手动加载符号
    • 试过这个; 我得到"符号文件xxxxx.pdb与模块不匹配" - 因为,当然,我们是从字节数组加载,而不是DLL本身.

.net c# visual-studio-2008 visual-studio

6
推荐指数
1
解决办法
1180
查看次数