小编chi*_*oro的帖子

favicon.png vs favicon.ico - 我为什么要使用PNG而不是ICO?

除了PNG是一种更常见的图像格式之外,是否有任何技术理由支持favicon.png与favicon.ico?

我支持所有支持PNG最爱图标的现代浏览器.

favicon png ico

428
推荐指数
9
解决办法
29万
查看次数

在我的C#代码中使用.NET 4.0元组是一个糟糕的设计决策吗?

随着.net 4 中的Tuple类的增加,我一直试图决定在我的设计中使用它们是否是一个糟糕的选择.我看到它的方式,一个元组可以是编写结果类的快捷方式(我相信还有其他用途).

所以这:

public class ResultType
{
    public string StringValue { get; set; }
    public int IntValue { get; set; }
}

public ResultType GetAClassedValue()
{
    //..Do Some Stuff
    ResultType result = new ResultType { StringValue = "A String", IntValue = 2 };
    return result;
}
Run Code Online (Sandbox Code Playgroud)

相当于:

public Tuple<string, int> GetATupledValue()
{
    //...Do Some stuff
    Tuple<string, int> result = new Tuple<string, int>("A String", 2);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

因此,抛开我错过了元组点的可能性,是一个Tuple设计选择不好的例子吗?对我来说,它似乎不那么混乱,但不像自我记录和干净.这意味着对于类型ResultType,后面很清楚类的每个部分意味着什么,但你有额外的代码来维护.随着Tuple<string, int>您将需要查找并弄清每一个 …

.net c# tuples application-design

166
推荐指数
7
解决办法
4万
查看次数

C#类可以从其接口继承属性吗?

这似乎意味着"不".哪个是不幸的.

[AttributeUsage(AttributeTargets.Interface | AttributeTargets.Class,
 AllowMultiple = true, Inherited = true)]
public class CustomDescriptionAttribute : Attribute
{
    public string Description { get; private set; }

    public CustomDescriptionAttribute(string description)
    {
        Description = description;
    }
}

[CustomDescription("IProjectController")]
public interface IProjectController
{
    void Create(string projectName);
}

internal class ProjectController : IProjectController
{
    public void Create(string projectName)
    {
    }
}

[TestFixture]
public class CustomDescriptionAttributeTests
{
    [Test]
    public void ProjectController_ShouldHaveCustomDescriptionAttribute()
    {
        Type type = typeof(ProjectController);
        object[] attributes = type.GetCustomAttributes(
            typeof(CustomDescriptionAttribute),
            true);

        // NUnit.Framework.AssertionException:   Expected: 1   But …
Run Code Online (Sandbox Code Playgroud)

c# attributes

110
推荐指数
4
解决办法
6万
查看次数

C#if-null-then-null表达式

只是为了好奇/方便:C#提供了两个我知道的很酷的条件表达式功能:

string trimmed = (input == null) ? null : input.Trim();
Run Code Online (Sandbox Code Playgroud)

string trimmed = (input ?? "").Trim();
Run Code Online (Sandbox Code Playgroud)

对于我经常遇到的情况,我想念另一个这样的表达:

如果输入引用为null,则输出应为null.否则,输出应该是访问输入对象的方法或属性的结果.

我在第一个例子中完成了这一点,但是(input == null) ? null : input.Trim()非常冗长且难以理解.

这种情况是否有另一个条件表达式,或者我可以??优雅地使用运算符吗?

.net c# conditional-operator conditional-expressions

55
推荐指数
5
解决办法
3万
查看次数

摆脱Visual Studio中的[动态] JavaScript视图

自从我在大约2个月前从头开始安装Visual Studio 2010以来,在调试在IE中运行的JavaScript代码时,它的行为略有不同.

  • 当我设置断点时,它会在标题中打开一个带有术语"[dynamic]"的副本,并在那里标记断点.
  • 在执行期间发生JavaScript错误时,它会在标记引发错误的代码行之前执行相同操作.
  • 此"动态"视图是可编辑的,但编辑无效 - 它们不会保存到文件中.

我发现这种行为非常不舒服.每次我在调试过程中发现代码中出现错误时,我都会在动态视图中修复它.我点击了保存.VS不抱怨.接下来我在IE中刷新页面,然后 - 砰 - 更改丢失,它再次加载未触及的旧版本.

我无法找到如何关闭这些观点.在我重新安装Visual Studio之前,它没有这样做.它只会为HTML文件中的内联脚本标记中的脚本创建"动态"视图.

javascript debugging visual-studio-2010

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

如果前面的脚本失败,则执行或不执行JavaScript片段

我刚刚学到了一个关于javascript执行的重要事实,如果出现错误的话.在我开始对此做出结论之前,我最好先验证一下我是否正确.

给定一个包含2个脚本的HTML页面:

<script src="script1.js" />
<script src="script2.js" />
Run Code Online (Sandbox Code Playgroud)

SCRIPT1:

doSomething();
Run Code Online (Sandbox Code Playgroud)

SCRIPT2:

doSomeOtherThing();
Run Code Online (Sandbox Code Playgroud)

这有效地导致单个脚本作为一个单元处理:

doSomething();
doSomeOtherThing();
Run Code Online (Sandbox Code Playgroud)

特别是,如果doSomething抛出错误,执行就会中断.'script2'永远不会被执行.

这是我的"第1课" - 人们可能会认为,因为它是一个单独包含的文件,所以它不受script1的影响.但它是. =>请参阅下面的"延迟更新"


现在,如果我们按如下方式更改script2(假设我们在上面的某处包含了jQuery):

$(document).ready({ doSomeOtherThing(); });
Run Code Online (Sandbox Code Playgroud)

并将脚本放在script2之前:

<script src="script2.js" />
<script src="script1.js" />
Run Code Online (Sandbox Code Playgroud)

执行的顺序实际上仍然是'doSome(()某些时候由'doSomeOtherThing()'执行的'doSomething()'.

但是它以两个"单位"执行:

  • doSomething 作为文档的java脚本的一部分提前执行
  • doSomeOtherThing 在处理document.ready事件时执行.

如果doSomeOtherThing抛出异常,它将不会破坏第二个处理"单元".

(我不使用该术语,thread因为我认为所有脚本通常由同一个线程执行,或者更确切地说,这可能取决于浏览器.)

所以,我的第2课:即使JavaScript错误可能会阻止任何后续脚本执行,它也不会停止事件循环.


结论1

$(document).ready() 在定义应该独立于任何其他脚本执行的JavaScript代码块方面做得很好.

或者,换句话说:如果你有一段JavaScript,并且想要确保即使其他脚本失败也能执行它,那么将它放在一个$(document).ready().

这对我来说是新的,因为如果脚本依赖于完全加载的文档,我只会使用该事件.


结论2

更进一步,将所有脚本包装在a中$(document).ready()以确保所有脚本都"排队"执行可能是一个很好的架构决策.另外,在上述第二示例中,如果script2.js被列入 script1.js实施例1如下所示:

<script src="script1.js" />
<script src="script2.js" />
Run Code Online (Sandbox Code Playgroud)

script1.js中的错误会阻止doSomeOtherThing()甚至被注册,因为该$(document).ready() …

javascript error-handling jquery javascript-events

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

为什么Resharper不接受我的NUnit测试?

我最近从MSTest转换为NUnit.我这样做了

  • 替换所有出现的[TestMethod]by [Test],[TestClass]by [Test]
  • 我还删除了Microsoft.VisualStudio ...引用并添加了NUnit.framework nuget包.

由于我已经这样做了,Resharper没有在方法旁边显示小测试图标.如果我使用Ctrl + U运行测试,则R显示正确的计数,但实际上并不运行任何计数.

有谁有想法吗?

编辑:必须有一些搞砸了我的程序集的东西,因为我创建了一个名为Test.Web的新程序,并创建了一个只有[TestFixture]的简单类,Resharper立即识别它.

resharper nunit

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

使用Markdown获取源代码文档

我正在寻找C#的XML源代码文档的替代方案,该文档根据XML的本质介绍了很多噪声,这些噪声在眼睛上很重要并且需要编写更多工作:

/// <summary>
/// This is text of importance. Linking to
/// <see cref="AnotherClass>is somewhat verbose.</see>
/// </summary>
/// <param name="andSo">is parameter documentation</param>
Run Code Online (Sandbox Code Playgroud)

相反,我想使用Markdown作为文档:

/// This is text of importance. Linking to [an](OtherClass) is less verbose.
/// 
/// Empty lines would make a new paragraph
///
/// aParameter
/// :    could possibly be documented in definition-list manner
///      as in http://bit.ly/1l9ik26
Run Code Online (Sandbox Code Playgroud)

我敢打赌我之前在Stackoverflow上找到了一个问题和答案.不幸的是我不能再找到它了.我尝试了所有可以想象的搜索关键字变体而没有运气.所以我希望你们中的任何人都能找到副本.至少我的问题将通过为现有问答提供不同措辞的"代理"来增加一些价值,从而提高未来访问者查找信息的几率.

更新:

我想我终于通过使用不同的搜索引擎找到了另一个问题:Markdown用于自动生成doc?.似乎Doxygen支持Markdown.Doxygen也支持C#.但对于@Sam Harwell提到的要求,这可能不会有很长的路要走.

c# markdown documentation-generation xml-documentation

20
推荐指数
2
解决办法
7012
查看次数

使用大型CLOB从C#调用存储过程的问题

我不是第一个遇到这些问题的人,并会在下面列出一些参考文章,但我仍在寻找合适的解决方案.

我需要从C#Web服务调用存储过程(Oracle 10g数据库).Web服务器安装了Oracle 9i客户端,我使用的是Microsoft System.Data.OracleClient.

该过程将XML作为CLOB.当XML超过4000字节(这可能是正常的用例)时,我偶然发现了以下错误:

ORA-01460 - 要求执行未实现或不合理的转换

我发现了这个,这个这个帖子.

此外,我发现了一个很有前途的解决方法,它不直接从C#调用存储过程,而是定义了一段匿名PL/SQL代码.此代码作为OracleCommand运行.XML嵌入为字符串文字,过程调用从该段代码中完成:

private const string LoadXml =
    "DECLARE " +
    "  MyXML CLOB; " +
    "  iStatus INTEGER; " +
    "  sErrMessage VARCHAR2(2000); " +
    "BEGIN " +
    "  MyXML := '{0}'; " +
    "  iStatus := LoadXML(MyXML, sErrMessage); " +
    "  DBMS_OUTPUT.ENABLE(buffer_size => NULL); " +
    "  DBMS_OUTPUT.PUT_LINE(iStatus || ',' || sErrMessage); " +
    "END;";
OracleCommand oraCommand = new OracleCommand(
    string.Format(LoadXml, …
Run Code Online (Sandbox Code Playgroud)

c# oracle stored-procedures clob system.data.oracleclient

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

在C#中重新启动foreach循环?

如何foreach在C#中重启循环?

例如:

Action a;
foreach(Constrain c in Constrains)
{
   if(!c.Allows(a))
   {
      a.Change();
      restart;
   }
}
Run Code Online (Sandbox Code Playgroud)

restart这里是continue或者break它从开始重新启动foreach它就像将for循环的计数器再次设置为0.

这可能在C#中吗?

编辑:我要感谢Mehrdad Afshari和Mahesh Velaga让我发现我当前实现中的一个错误(index = 0),否则就不会发现它.

c# foreach loops reserved-words

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