小编Mat*_*t H的帖子

递归列表展平

我本可以自己写这个,但是我想要完成它的具体方法就是把我扔掉.我正在尝试编写一个类似于.NET 3.5中引入的其他通用扩展方法,它将采用IEnumerables的嵌套IEnumerable(依此类推)并将其展平为一个IEnumerable.有人有主意吗?

具体来说,我遇到了扩展方法本身的语法问题,因此我可以处理展平算法.

.net c# recursion

34
推荐指数
6
解决办法
2万
查看次数

关闭Java FileInputStream

好吧,我一直在做以下(变量名已被更改):


FileInputStream fis = null;
try
{
    fis = new FileInputStream(file);

    ... process ...

}
catch (IOException e)
{
    ... handle error ...
}
finally
{
    if (fis != null)
        fis.close();
}

最近,我开始使用FindBugs,这表明我没有正确关闭流.我决定看看是否有任何可以用finally {}块做的事情,然后我看,哦是的,close()可以抛出IOException.人们应该在这做什么?Java库会抛出太多已检查的异常.

java exception stream

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

使用C#的XML注释cref属性和params语法

在C#中,我试图使用<see cref ="blah"/>来引用包含params关键字的方法签名.我知道这会将参数列表转换为数组,但我甚至无法弄清楚如何在CREF属性中引用数组.我在搜索中找不到任何内容,也不知道我知道的任何人.编译器在方括号上窒息.我已经尝试了各种不同的组合,使用花括号,使用Array类,但没有任何工作.有谁知道这个?

c# params-keyword xml-comments

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

尝试/最终忽略异常吗?

我有一种情况,我希望无论发生什么事情都要执行某些代码,但我需要将异常传递到堆栈中以便稍后处理.以下是:


try
{
  // code
}
finally
{
  // code that must run
}
Run Code Online (Sandbox Code Playgroud)

只是忽略任何异常,还是会将它们传递给它们?我的测试似乎表明他们仍然被传递,但我想确定我不是疯了.

编辑:我的问题不是关于何时以及最终是否会执行,而是关于异常是否仍然被抛出,但现在已经得到了回答.

exception-handling exception finally

10
推荐指数
2
解决办法
3876
查看次数

C#并发列表问题

我有一个C#的情况,我有一个简单类型的列表.可以通过多个线程访问此列表:可以添加或删除条目,并且可以检查条目是否存在.我已将列表封装在一个对象中,这个对象到目前为止只暴露了这三个操作.

我有几个案例要处理(与我刚才提到的方法不完全相同).

  1. 线程只能检查是否存在条目.(简单)
  2. 线程可以检查条目是否存在,如果不存在,则添加它.
  3. 线程需要检查条目是否存在,如果存在,则等待它被删除.
  4. 2和3的组合,其中一个线程检查是否存在一个条目,如果它确实存在,它必须等到它被删除才能自己添加它.

整个想法是条目的存在表示锁定.如果存在条目,则无法更改其标识的对象,并且代码无法继续,因为它正在其他位置进行修改.

这些看似简单的新手情况,但我在并发问题上让自己感到高兴,这让我有点偏执,而且我也不熟悉C#的并发机制.

处理这个问题的最佳方法是什么?我完全没了?应该检查并添加(测试和设置?)组合成第四个原子操作?我只是将锁块添加到访问列表的方法中吗?

此外,是否有可能对这种事情进行单元测试(不是简单的操作,并发情况)?

c# concurrency

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

为什么Java的GtkLookAndFeel Popups没有边框?

我有一个已经编写的Java Swing应用程序(所以没有切换UI框架),我希望看起来至少使用GTKLookAndFeel.我已经考虑过LookAndFeels中字体和组件大小差异等问题,但有一点我无法弄清楚为什么我的弹出菜单根本没有边框.看起来他们正在使用不看起来像GTK本地的Synth边框.我希望能够支持Metal,Windows和GTK,但这些弹出窗口看起来很糟糕.这是一个错误吗?什么是一个很好的(非hacky)方法解决这个问题,而不会影响其他看起来很好的LookAndFeels边框?

java gtk swing look-and-feel

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

行为与基于状态的测试

我知道这个问题是一场宗教战争的一部分,但我有以下情况:我有一个对象,Responder它在对象上调用一个方法Updater来响应不同的事件.我最近以这种方式分离了测试:Updater方法本身的基于状态的测试,以及Responder调用它的基于行为的测试.也就是说,我UpdaterResponder测试中嘲笑,只是为了确保它被调用.

我是否还应该测试应该在Updater测试中更新的对象的状态而不是嘲笑Responder?我喜欢我所做的,因为它需要较少的设置,似乎更好地隔离测试.但是,这似乎与执行和预期的行为联系Updater起来Responder.那太脆了吗?这是一个简化的例子.

unit-testing mocking

5
推荐指数
1
解决办法
3315
查看次数

单元测试日期和时间格式时,硬编码预期结果是否合适?

我喜欢让我的单元测试非常简单易懂.我经常对测试的预期结果进行硬编码,以避免重复我正在测试的代码.另外,我经常使用数据驱动的测试.例如,如果我正在测试日期/时间的格式,我有时会硬编码预期的字符串,即."1/1/2000"或"1:00 PM".但是,由于日期和时间格式是特定于文化的,我们的应用程序是可本地化的,因此实际输出可能会有所不同.但是,我的团队总部设在美国,所以这通常不是问题.我们的持续集成和构建服务器也与美国文化信息一起运行.

有一个团队成员抱怨,因为他已经改变了他的开发机器上的日期格式,以手动测试其他日期格式,因此许多测试失败了.在单元测试中测试输出时,我应该使用当前的文化信息,还是可以接受这种硬编码?

更新:我最终为某些测试设置了特定的语言环境.

unit-testing

5
推荐指数
1
解决办法
776
查看次数

在WiX中检查.NET Framework 4.5的属性参考是什么?

我正在使用WiX Toolset 3.7,我需要在安装程序中检查.NET Framework 4.5的安装.但是,文档似乎未更新为包含4.5属性.有一个错误似乎暗示这些属性确实存在:https://sourceforge.net/p/wix/bugs/3167/,但我找不到引用.我尝试只复制4.0属性并使用NETFRAMEWORK45FULL,但WiX编译器无法识别它.

wix .net-framework-version

5
推荐指数
1
解决办法
2371
查看次数

为什么使用+运算符的字符串连接与C#中的动态类型一起使用?

我最近看到了一个示例,其中演示了以下内容:

T Add<T>(dynamic a, dynamic b)
{
    return a + b;
}

Add<string>("hello", "world");  // Returns "helloworld"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用表达式来创建"通用"添加功能:

ParameterExpression left = Expression.Parameter(typeof(T), "left");
ParameterExpression right = Expression.Parameter(typeof(T), "right");
var add = Expression.Lambda<Func<T, T, T>>(Expression.Add(left, right), left, right).Compile();  // Fails with System.InvalidOperationException : The binary operator Add is not defined for the types 'System.String' and 'System.String' when T == String.
Run Code Online (Sandbox Code Playgroud)

然后将此函数与字符串一起使用,它失败,因为String类型实际上并不实现+运算符,而只是String.Concat()的语法糖.

那怎么样,动态允许这个工作?我想在运行时它已超过使用String.Concat()重写+的点.

c# string dynamic-language-runtime dynamic expression-trees

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