问题列表 - 第3149页

单元测试中的C#扩展方法奇数

使用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)

.net c# extension-methods unit-testing exception

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

在 WinForms 应用程序中禁用重绘

我正在开发一个 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)如果我一开始就做错了并且应该以其他方式解决?

.net c# user-interface winapi

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

如何使用xdebug使NetBeans不停在第一行?

我正在使用NetBeans 6.5开发PHP,我有xdebug设置.有没有办法告诉它不要在每次请求时停在文件的第一行?JIT模式不会解决这个问题,因为我不希望它停留在我捕获的每个异常上.

netbeans xdebug netbeans6.5

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

如何使我的程序DEP兼容?

我有一个Windows窗体(.net 3.0)项目,由于DEP错误,该项目无法在我客户的vista计算机上运行.它在我的vista机器上运行,并在虚拟机中的vista sp1的干净版本中运行.我无法找到使我的程序DEP,数据执行保护兼容的方法.我真的无法做任何事情来结束用户机器,它只需要运行.这个最新的vista开发噩梦有什么办法吗?我的程序使用devexpress控件,sql express和.net即web浏览器控件.我已经跳出了ie控件,但无济于事.我有其他程序在同一台机器上使用devexpress和sql express,它们运行正常.我无法在用户的计算机上进行调试.

windows winforms

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

网页保存在 Google 缓存中需要多长时间?

我听到很多人问信息在 Google 缓存中保留多长时间。对我来说,这无关紧要(至少在有人诽谤我的名字之前)。

google-search

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

为什么VB.net如此冗长?是否有可能削减脂肪?

语言在成熟时会变得更加冗长吗?感觉每个新版本的VB.net都获得了更多的语法.是否有可能像关键词"昏暗"一样削减一些脂肪?从版本1开始,C#也感觉它的语法越来越多.

vb.net programming-languages

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

宽度为25%的四个节点彼此不相邻?

我有一个标题节点,其中有四个子节点.没有边框,填充或边距.所有四个都有宽度:25%; css规则.在Opera中工作得很好,在IE中,最后一个块有时会根据窗口的宽度翻转到下一行.

我可以通过给一个块宽度为24.8%来解决它,但Opera将其解释为24%,因此在块的末尾留下1%的宽开放间隙.

我怎么解决这个问题?最后一个块可能会错过右边的像素.

css

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

php:推送到可能存在或不存在的数组

我想创建一个带有消息的数组.

$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();

php arrays push declaration

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

表中两行之间的空格?

这可能通过CSS吗?

我尝试着

tr.classname {
  border-spacing: 5em;
}
Run Code Online (Sandbox Code Playgroud)

无济于事.也许我做错了什么?

html css

733
推荐指数
21
解决办法
111万
查看次数

如何从excel中的公式调用VSTO函数?

我希望能够从excel工作表中的单元格调用由VSTO插件公开的函数.更具体地说,如果我有一个返回"bar"的VSTO函数Foo(),我希望能够在A1中写入= Foo(),计算结果为"bar".

这可能吗?我需要采取哪些关键步骤?

能够利用托管代码和VS08 IDE进行Excel开发的前景非常吸引人.我以为VSTO会让我轻松做到这一点,但我不再确定.我在这里误解了这个架构吗?文档有点粗制滥造.

excel vsto ms-office

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