使用Visual Studio 2008/C#/ VS单元测试.
我有一个非常简单的扩展方法,它会告诉我一个对象是否属于特定类型:
public static bool IsTypeOf<T, O>(this T item, O other)
{
if (!(item.GetType() is O))
return false;
else
return true;
}
Run Code Online (Sandbox Code Playgroud)
它会被称为:
Hashtable myHash = new Hashtable();
bool out = myHash.IsTypeOf(typeof(Hashtable));
Run Code Online (Sandbox Code Playgroud)
当我在调试模式下运行代码或调试我的单元测试时,该方法可以正常工作.但是,当我在上下文中运行所有单元测试时,我神秘地为此方法获取了MissingMethodException.奇怪的是,同一类中的另一种扩展方法没有问题.
我倾向于问题不是扩展方法本身.我试过删除临时文件,关闭/重新打开/清理/重建解决方案等等.到目前为止,没有任何工作.
有没有人遇到过这个?
编辑:这是代码的简化示例.基本上,它是我能够创建的最小的可重现的例子,没有周围代码的包袱.这个单独的方法在进入单元测试时也会单独抛出MissingMethodException,如上所述.有问题的代码没有完成手头的任务,就像Jon提到的那样,它更像是我目前关注的异常来源.
解决方案:我尝试了许多不同的东西,同意Marc关于它是参考问题的思路.删除引用,清理/重建,重新启动Visual Studio不起作用.最终,我最终在我的硬盘上搜索已编译的DLL并将其从任何没有意义的地方删除.删除除TestResults文件夹中的实例以外的所有实例后,我能够成功重建并重新运行单元测试.
至于方法的内容,我在单元测试中发现了这个问题,并且从未能够使这个概念起作用.由于O是RunTimeType,我似乎没有太多访问权限,并且曾尝试使用IsAssignableFrom()来正确返回函数.此时,此功能已从我的验证方法中删除,以便在其他时间重新访问.但是,在删除之前,我仍然得到了许多其他方法开始这篇文章的原始问题.
解决后:实际的方法并不像我想象的那样复杂.这是实际的工作方法:
public static void IsTypeOf<T>(this T item, Type type)
{
if (!(type.IsAssignableFrom(item.GetType())))
throw new ArgumentException("Invalid object type");
}
Run Code Online (Sandbox Code Playgroud)
和单元测试来验证它:
[TestMethod]
public void IsTypeOfTest()
{
Hashtable myTable = new Hashtable();
myTable.IsTypeOf(typeof(Hashtable));
try
{
myTable.IsTypeOf(typeof(System.String));
Assert.Fail("Type comparison should fail.");
} …
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 C#.Net 应用程序,其中有一个有点烦人的错误。主窗口有许多选项卡,每个选项卡上都有一个网格。当从一个选项卡切换到另一个选项卡或在网格中选择不同的行时,它会进行一些后台处理,在此期间菜单会在重绘时闪烁(文件、帮助等菜单项以及窗口图标和标题)。
我首先尝试在切换选项卡/行(WM_SETREDRAW 消息)时禁用窗口重绘。在一种情况下,它工作得很好。另一方面,它解决了直接错误(标题/菜单闪烁),但在禁用重绘和再次启用之间,窗口对鼠标单击是“透明”的 - 有一个小窗口(<1秒),我可以在其中单击比如说,它会突出显示我桌面上的一个图标,就好像该应用程序根本不存在一样。如果我在后台运行其他东西(例如 Firefox),它实际上会在单击时获得焦点(并绘制浏览器的一部分,例如地址栏。)
这是我添加的代码。
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)0; //disable redraw
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
Run Code Online (Sandbox Code Playgroud)
<snip> - 应用程序忽略此部分中的点击(在一种情况下)
m = new Message();
m.HWnd = System.Windows.Forms.Application.OpenForms[0].Handle; //top level
m.WParam = (IntPtr)1; //enable
m.LParam = (IntPtr)0; //unused
m.Msg = 11; //wm_setredraw
WndProc(ref m);
System.Windows.Forms.Application.OpenForms[0].Refresh();
Run Code Online (Sandbox Code Playgroud)
有谁知道是否a)有办法解决这里的透明应用程序问题,或者b)如果我一开始就做错了并且应该以其他方式解决?
我正在使用NetBeans 6.5开发PHP,我有xdebug设置.有没有办法告诉它不要在每次请求时停在文件的第一行?JIT模式不会解决这个问题,因为我不希望它停留在我捕获的每个异常上.
我有一个Windows窗体(.net 3.0)项目,由于DEP错误,该项目无法在我客户的vista计算机上运行.它在我的vista机器上运行,并在虚拟机中的vista sp1的干净版本中运行.我无法找到使我的程序DEP,数据执行保护兼容的方法.我真的无法做任何事情来结束用户机器,它只需要运行.这个最新的vista开发噩梦有什么办法吗?我的程序使用devexpress控件,sql express和.net即web浏览器控件.我已经跳出了ie控件,但无济于事.我有其他程序在同一台机器上使用devexpress和sql express,它们运行正常.我无法在用户的计算机上进行调试.
我听到很多人问信息在 Google 缓存中保留多长时间。对我来说,这无关紧要(至少在有人诽谤我的名字之前)。
语言在成熟时会变得更加冗长吗?感觉每个新版本的VB.net都获得了更多的语法.是否有可能像关键词"昏暗"一样削减一些脂肪?从版本1开始,C#也感觉它的语法越来越多.
我有一个标题节点,其中有四个子节点.没有边框,填充或边距.所有四个都有宽度:25%; css规则.在Opera中工作得很好,在IE中,最后一个块有时会根据窗口的宽度翻转到下一行.
我可以通过给一个块宽度为24.8%来解决它,但Opera将其解释为24%,因此在块的末尾留下1%的宽开放间隙.
我怎么解决这个问题?最后一个块可能会错过右边的像素.
我想创建一个带有消息的数组.
$myArray = array('my message');
Run Code Online (Sandbox Code Playgroud)
但是myArray
如果已经存在,使用此代码将被覆盖.
如果我使用array_push
,它必须已经存在.
$myArray = array(); // <-- has to be declared first.
array_push($myArray, 'my message');
Run Code Online (Sandbox Code Playgroud)
否则,它会叮叮当当.
有没有办法让上面的第二个例子工作,没有先清除$myArray = array();
?
这可能通过CSS吗?
我尝试着
tr.classname {
border-spacing: 5em;
}
Run Code Online (Sandbox Code Playgroud)
无济于事.也许我做错了什么?
我希望能够从excel工作表中的单元格调用由VSTO插件公开的函数.更具体地说,如果我有一个返回"bar"的VSTO函数Foo(),我希望能够在A1中写入= Foo(),计算结果为"bar".
这可能吗?我需要采取哪些关键步骤?
能够利用托管代码和VS08 IDE进行Excel开发的前景非常吸引人.我以为VSTO会让我轻松做到这一点,但我不再确定.我在这里误解了这个架构吗?文档有点粗制滥造.