我本可以自己写这个,但是我想要完成它的具体方法就是把我扔掉.我正在尝试编写一个类似于.NET 3.5中引入的其他通用扩展方法,它将采用IEnumerables的嵌套IEnumerable(依此类推)并将其展平为一个IEnumerable.有人有主意吗?
具体来说,我遇到了扩展方法本身的语法问题,因此我可以处理展平算法.
好吧,我一直在做以下(变量名已被更改):
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库会抛出太多已检查的异常.
在C#中,我试图使用<see cref ="blah"/>来引用包含params关键字的方法签名.我知道这会将参数列表转换为数组,但我甚至无法弄清楚如何在CREF属性中引用数组.我在搜索中找不到任何内容,也不知道我知道的任何人.编译器在方括号上窒息.我已经尝试了各种不同的组合,使用花括号,使用Array类,但没有任何工作.有谁知道这个?
我有一种情况,我希望无论发生什么事情都要执行某些代码,但我需要将异常传递到堆栈中以便稍后处理.以下是:
try
{
// code
}
finally
{
// code that must run
}
Run Code Online (Sandbox Code Playgroud)
只是忽略任何异常,还是会将它们传递给它们?我的测试似乎表明他们仍然被传递,但我想确定我不是疯了.
编辑:我的问题不是关于何时以及最终是否会执行,而是关于异常是否仍然被抛出,但现在已经得到了回答.
我有一个C#的情况,我有一个简单类型的列表.可以通过多个线程访问此列表:可以添加或删除条目,并且可以检查条目是否存在.我已将列表封装在一个对象中,这个对象到目前为止只暴露了这三个操作.
我有几个案例要处理(与我刚才提到的方法不完全相同).
整个想法是条目的存在表示锁定.如果存在条目,则无法更改其标识的对象,并且代码无法继续,因为它正在其他位置进行修改.
这些看似简单的新手情况,但我在并发问题上让自己感到高兴,这让我有点偏执,而且我也不熟悉C#的并发机制.
处理这个问题的最佳方法是什么?我完全没了?应该检查并添加(测试和设置?)组合成第四个原子操作?我只是将锁块添加到访问列表的方法中吗?
此外,是否有可能对这种事情进行单元测试(不是简单的操作,并发情况)?
我有一个已经编写的Java Swing应用程序(所以没有切换UI框架),我希望看起来至少使用GTKLookAndFeel.我已经考虑过LookAndFeels中字体和组件大小差异等问题,但有一点我无法弄清楚为什么我的弹出菜单根本没有边框.看起来他们正在使用不看起来像GTK本地的Synth边框.我希望能够支持Metal,Windows和GTK,但这些弹出窗口看起来很糟糕.这是一个错误吗?什么是一个很好的(非hacky)方法解决这个问题,而不会影响其他看起来很好的LookAndFeels边框?
我知道这个问题是一场宗教战争的一部分,但我有以下情况:我有一个对象,Responder
它在对象上调用一个方法Updater
来响应不同的事件.我最近以这种方式分离了测试:Updater
方法本身的基于状态的测试,以及Responder
调用它的基于行为的测试.也就是说,我Updater
在Responder
测试中嘲笑,只是为了确保它被调用.
我是否还应该测试应该在Updater
测试中更新的对象的状态而不是嘲笑Responder
?我喜欢我所做的,因为它需要较少的设置,似乎更好地隔离测试.但是,这似乎与执行和预期的行为联系Updater
起来Responder
.那太脆了吗?这是一个简化的例子.
我喜欢让我的单元测试非常简单易懂.我经常对测试的预期结果进行硬编码,以避免重复我正在测试的代码.另外,我经常使用数据驱动的测试.例如,如果我正在测试日期/时间的格式,我有时会硬编码预期的字符串,即."1/1/2000"或"1:00 PM".但是,由于日期和时间格式是特定于文化的,我们的应用程序是可本地化的,因此实际输出可能会有所不同.但是,我的团队总部设在美国,所以这通常不是问题.我们的持续集成和构建服务器也与美国文化信息一起运行.
有一个团队成员抱怨,因为他已经改变了他的开发机器上的日期格式,以手动测试其他日期格式,因此许多测试失败了.在单元测试中测试输出时,我应该使用当前的文化信息,还是可以接受这种硬编码?
更新:我最终为某些测试设置了特定的语言环境.
我正在使用WiX Toolset 3.7,我需要在安装程序中检查.NET Framework 4.5的安装.但是,文档似乎未更新为包含4.5属性.有一个错误似乎暗示这些属性确实存在:https://sourceforge.net/p/wix/bugs/3167/,但我找不到引用.我尝试只复制4.0属性并使用NETFRAMEWORK45FULL,但WiX编译器无法识别它.
我最近看到了一个示例,其中演示了以下内容:
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()重写+的点.