小编Ian*_*Ian的帖子

空条件运算符

C#6.0刚刚发布,并且有一个新的不错的小功能,我真的很想在JavaScript中使用它.他们被称为Null条件运算符.这些使用?.?[]语法.

这些操作基本上允许您null在尝试访问属性之前检查您获得的对象.如果对象是null,那么您将获得null属性访问的结果.

int? length = customers?.Length;
Run Code Online (Sandbox Code Playgroud)

所以这里int可以为null,并且如果customers为null 则将采用该值.更好的是你可以链接这些:

int? length = customers?.orders?.Length;
Run Code Online (Sandbox Code Playgroud)

我不相信我们可以用JavaScript做到这一点,但我想知道做类似事情的最好方法是什么.通常我发现链接if块难以阅读:

var length = null;
if(customers && customers.orders) {
    length = customers.orders.length;
}
Run Code Online (Sandbox Code Playgroud)

javascript

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

如何避免属性递归

这最近打击了我正在进行的一个项目.大多数人都熟悉属性递归:

public int Test 
{
   get { return this.test; }
   set { this.Test = value; }
}
private int test;
Run Code Online (Sandbox Code Playgroud)

你不小心把一个大写的T放在这个setter中,你已经把自己打开了StackoverflowException.更糟糕的是,如果你没有定义它,通常visual studio会自动纠正套管,使你进入无效状态.

我最近在构造函数中做了类似的事情:

public TestClass(int test)
{
    this.Test = Test;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,你没有得到StackOverflowException,现在你遇到了编程错误.在我的情况下,这个值被传递给一个WebService,而后者使用了一个默认值(不是0),这导致我错过了我错误地分配它的事实.集成测试全部通过,因为该服务没有说

"嘿,你忘记了这个非常重要的领域!"

我可以采取哪些措施来避免这种行为?我一直被建议不要像以下那样定义变量,我个人不喜欢它们,但我想不出任何其他选择:

private int _test;
private int mTest;
Run Code Online (Sandbox Code Playgroud)

编辑

通常我可以想到的下划线或m前缀不合适的原因是:

  • 可读性
  • 如果您继续使用第三方课程,因为您可以混合使用样式,那么滚动成员会稍微困难一些.

c# recursion properties

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

Why doesn't click event always fire?

If you're revisiting this question I've moved all the updates to the bottom so it actually reads better as a question.

The Problem

I've got a bit of a strange problem handling browser events using D3. Unfortunately this sits in quite a large application, and because I'm completely lost on what the cause is I'm struggling to find a small reproduceable example so I'm going to provide as much hopefully useful information as I can.

所以我的问题是click某些DOM元素似乎没有可靠地触发事件.我有两组不同的元素填充 …

javascript events d3.js

31
推荐指数
1
解决办法
3365
查看次数

Windows 8 - Fancy Progress Bars API?

有谁知道Windows 8用于文件传输进度的新"花式"文件传输进度条是否可以通过某些API(最好是C#)获得?我可以在我们的应用程序中考虑一些有用的地方,但似乎无法确定它是消耗品还是仅在Windows内部可用.

编辑

我现在的答案包括我写的WPF实现,你可以在你自己的项目中使用:)

带有花哨的进度条的Windows 8文件操作对话框的屏幕截图

c# wpf winforms windows-8

30
推荐指数
1
解决办法
2462
查看次数

DataGridViewComboBoxCell绑定 - "值无效"

我正在尝试将DataGridView中的单独ComboBox单元绑定到自定义类,并继续收到错误

DataGridViewComboBoxCell值无效

我现在正在将单元格的数据源分配给IList<ICustomInterface>我所拥有的词典.但是,在设置数据源时,ComboBoxCell未设置索引,因此选择了无效值.

我试图弄清楚如何让它选择一个真正的值,例如列表中的第0个项目,它已被删除此错误,或找到解决问题的另一种方法.有人有什么建议吗?

c# datagridview datagridviewcombobox

28
推荐指数
3
解决办法
8万
查看次数

捕获COMException特定的错误代码

我希望有人可以帮助我.我有一个COM需要捕获的特定异常,然后尝试做其他事情,其他所有都应该被忽略.我的错误消息是异常:

System.Runtime.InteropServices.COMException(0x800A03EC):Microsoft Office Excel无法访问文件"C:\ test.xls".有几个可能的原因:

所以我最初的尝试是

try
{
 // something
}
catch (COMException ce)
{
   if (ce.ErrorCode == 0x800A03EC)
   {
      // try something else 
   }
}
Run Code Online (Sandbox Code Playgroud)

然而,我读了一个编译器警告:

警告22与积分常数的比较是无用的; 常量超出了'int'类型的范围..... ExcelReader.cs 629 21

现在我知道0x800A03EC是HResult,我刚看了MSDN并阅读:

HRESULT是一个32位值,分为三个不同的字段:严重性代码,设施代码和错误代码.严重性代码指示返回值是表示信息,警告还是错误.设施代码标识负责该错误的系统区域.

所以我的最终问题是,我如何确保捕获该特定异常?或者我如何从HResult获取错误代码?

提前致谢.

c# com

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

SVG到PNG服务器端 - 使用node.js

我正在尝试按照本教程将d3.js SVG Vis转换为PNG服务器端(使用Node.js)http://eng.wealthfront.com/2011/12/converting-dynamic-svg-to- PNG-with.html

链接到完整代码: https ://gist.github.com/1509145

但是,每当我尝试发出加载页面的请求时,我都会收到此错误

    /Users/me/Node/node_modules/jsdom/lib/jsdom.js:171
        features   = JSON.parse(JSON.stringify(window.document.implementation._fea
                                                              ^
    TypeError: Cannot read property 'implementation' of undefined
        at exports.env.exports.jsdom.env.processHTML (/Users/dereklo/Node/node_modules/jsdom/lib/jsdom.js:171:59)
        at Object.exports.env.exports.jsdom.env (/Users/dereklo/Node/node_modules/jsdom/lib/jsdom.js:262:5)
        at Server.<anonymous> (/Users/dereklo/Node/Pie/pie_serv.js:26:9)
        at Server.EventEmitter.emit (events.js:91:17)
        at HTTPParser.parser.onIncoming (http.js:1785:12)
        at HTTPParser.parserOnHeadersComplete [as onHeadersComplete] (http.js:111:23)
        at Socket.socket.ondata (http.
Run Code Online (Sandbox Code Playgroud)

有人知道为什么会这样吗?我已经安装了jsdom模块,所以我真的不知道是什么导致了这些问题...提前感谢.

编辑

这是我用来实现node.js服务器的代码.我的最新一期是在这个来源之下......

var http = require('http'),
    url = require('url'),
    jsdom = require('jsdom'),
    child_proc = require('child_process'),
    w = 400,
    h = 400,
    __dirname = "Users/dereklo/Node/pie/"

   scripts = ["/Users/dereklo/Node/pie/d3.min.js",
               "/Users/dereklo/Node/pie/d3.layout.min.js",
               "/Users/dereklo/Node/pie/pie.js"],
      //scripts = ["./d3.v2.js",
        // …
Run Code Online (Sandbox Code Playgroud)

node.js d3.js

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

如何从开玩笑手表中排除文件?

我正在做一些有点奇怪的东西jest用于测试我正在写一些东西到磁盘.如果我watch在jest中使用标志,那么我(很明显)发现每次我向磁盘写入内容时,测试会再次重新启动.

我目前没有任何配置,我已经看过文档,但我真的不清楚我需要使用哪个选项来抑制观看特定文件.我相信我可以看到从代码覆盖中排除代码,测试执行而不是实际观察者的选项.

在我的情况下,我有一个这样的设置,我只想抑制我的结果目录:

  • __tests__
    • __snapshots__ (由jest创建)
    • results (由我和要创建的目录创建)
  • testfile1.js

有人能说清楚这样做吗?

javascript jestjs

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

计算枚举上设置的标志数

我相信必须有一个更好的方法来做到这一点.我正在尝试对Flags枚举进行计数操作.在我尝试所有可能的值并计算成功的AND操作之前.

例如

[Flags]
public enum Skills
{
    None = 0,
    Skill1 = 1,
    Skill2 = 2,
    Skill3 = 4,
    Skill4 = 8,
    Skill5 = 16,
    Skill6 = 32,
    Skill7 = 64,
    Skill8 = 128
}

public static int Count(Skills skillsToCount)
{
   Skills skill;
   for (int i = 0; i < SkillSet.AllSkills.Count; i++)
   {
      skill = SkillSet.AllSkills[i];
      if ((skillsToCount & skill) == skill && skill != Skills.None)
         count++;
   }
   return count;
}
Run Code Online (Sandbox Code Playgroud)

我确信必须有更好的方法来做到这一点,但必须患有精神障碍.谁能建议更好的解决方案?

c# enums

19
推荐指数
4
解决办法
7850
查看次数

界面:没有Getter的Setter

我最近遇到了一个界面,它只定义了一个像这样的setter:

public interface IAggregationView
{
   DataTable SetSiteData { set; }
}
Run Code Online (Sandbox Code Playgroud)

我质疑这一点,并且相信这是微软为WebPart设计(针对SharePoint)所倡导的做法之一.实际上,这个例子是从他们的例子中直接复制的.

我认为这是一个糟糕的模式,我不明白为什么有人应该能够设置一个值,然后再也无法再读它了,我相信一个二传手应该总是伴随着一个吸气剂(但不一定是其他方式).

我想知道是否有人可以解释只有一个二传手的好处,为什么微软可能会在这种情况下建议它,以及它是否真的是一个好的模式?

c#

19
推荐指数
3
解决办法
3589
查看次数