小编And*_*erd的帖子

Interleaved与LINQ合并?

我正在尝试使用LINQ.假设我有两个相同长度的集合:

var first = new string[] { "1", "2", "3" };
var second = new string[] { "a", "b", "c" };
Run Code Online (Sandbox Code Playgroud)

我想将这两个集合合并为一个,但是以交错的方式.因此,结果序列应为:

"1", "a", "2", "b", "3", "c"
Run Code Online (Sandbox Code Playgroud)

到目前为止,我想出的是一个Zip匿名类型和SelectMany:

var result = first.Zip( second, ( f, s ) => new { F = f, S = s } )
                  .SelectMany( fs => new string[] { fs.F, fs.S } );
Run Code Online (Sandbox Code Playgroud)

有没有人知道用LINQ实现这种交错合并的替代/简单方法?

c# linq

28
推荐指数
4
解决办法
5267
查看次数

在Castle Windsor 3中,覆盖单元测试中的现有组件注册

我试图在我的自动化测试中使用Castle Windsor,如下所示:

每次测试:

  • Setup()函数创建一个Windsor容器,注册每个组件的默认实现
  • Test函数通过该方法访问组件IWindsorContainer.Resolve<T>,并测试它们的行为
  • TearDown()函数处理Windsor容器(以及任何创建的组件)

例如,我可能有15个测试访问组件,这些组件间接导致组件的创建IMediaPlayerProxyFactory.该SetUp函数注册了一个足够好的实现IMediaPlayerProxyFactory,所以我没有在15个测试中的每个测试中注册这个的维护负担.

但是,我现在正在编写测试Test_MediaPlayerProxyFactoryThrowsException,确认我的系统优雅地处理IMediaPlayerProxyFactory组件中的错误.在测试方法中,我创建了我的特殊模拟实现,现在我想将它注入到框架中:

this.WindsorContainer.Register(
                                 Component.For<IMediaPlayerProxyFactory>()
                                          .Instance(mockMediaPlayerProxyFactory)
                              );
Run Code Online (Sandbox Code Playgroud)

但温莎抛出一条Castle.MicroKernel.ComponentRegistrationException消息,"已经有一个有这个名字的组件."

有什么方法可以让我mockMediaPlayerProxyFactory成为默认实例IMediaPlayerProxyFactory,丢弃已经注册的组件?


根据文档,Castle Windsor 3允许注册覆盖,但我只能找到一个例子:

Container.Register(
    Classes.FromThisAssembly()
        .BasedOn<IEmptyService>()
        .WithService.Base()
        .ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
Run Code Online (Sandbox Code Playgroud)

ConfigureFor是一种BasedOnDescriptor类的方法.在我的情况下,我没有使用FromDescriptorBasedOnDescriptor.

unit-testing castle-windsor

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

Visual Studio 2012无法检测Visual Studio 2008构建工具

我正在尝试使用Visual Studio 2012构建面向.NET 3.5的C++ CLI应用程序.

通过安装Visual Studio 2008并指定v90平台工具集,我已经在一台机器上完成了这项工作.

现在我在一台新机器上尝试这个,我已经安装了Visual Studio 2008,然后安装了Visual Studio 2012.

现在我得到了令人难以置信的令人沮丧的错

错误81错误MSB8020:找不到Visual Studio 2008的构建工具(Platform Toolset ='v90').要使用v90构建工具进行构建,请单击"项目"菜单或右键单击解决方案,然后选择"更新VC++项目...".安装Visual Studio 2008以使用Visual Studio 2008构建工具进行构建.C:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.Cpp.Platform.targets 43 5 WinApiWrapper(Visual Studio 2008)

为什么不能让Visual Studio 2012能够找到Visual Studio 2008.有什么方法可以帮助它吗?

c++-cli .net-3.5 visual-studio-2008 visual-studio-2012

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

WPF标准命令 - 哪里退出?

我正在WPF应用程序中创建一个标准菜单.

我知道我可以创建自定义命令,但我知道还有一堆标准命令要绑定.

例如,要打开一个文件,我应该绑定到ApplicationCommands.Open,关闭一个文件,我应该绑定到ApplicationCommands.Close.还有大量的EditCommands,ComponentCommandsNavigationCommands.

似乎没有"退出"命令.我本来期望有ApplicationCommands.Exit.

我应该将什么绑定到"退出"菜单项?要为某些东西创建自定义命令,这个通用似乎是错误的.

wpf binding

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

客户验收测试的详细程度如何?

这是一个测试描述,测试"Create New Widget"用例.

  • 确认您可以在系统中输入新的窗口小部件.

这是另一个测试描述,测试"Create New Widget"用例.

  • 提出申请.
  • 创建名为"A-008"的新窗口小部件,描述为"接受测试3-45的测试窗口小部件".
  • 确认窗口小部件现在在最左侧的窗口小部件树视图中可见.
  • 在树视图中选择另一个小部件,然后再次选择小部件"A-008".确认窗口小部件中的值显示与您输入的值相等.
  • 删除小部件"A-008"并关闭应用程序

这是另一个测试描述,测试"Create New Widget"用例.

  • 提出申请.
  • 打开查看相同数据的应用程序的第二个实例.
  • 在应用程序的第一个实例中,右键单击"Widgets"节点.在随后的上下文菜单中,激活"创建新窗口小部件"菜单项.
  • 应激活"新窗口小部件"窗口.将每个字段留空,然后按OK按钮.应该出现一个消息框,上面写着"请输入一个小部件名称".在此消息框上按确定.
  • 在"名称"字段中输入"A-008".
  • 将描述字段设置为"骆驼(喇嘛glama)是一种南美骆驼科动物,被印加人和安第斯山脉的其他土着人广泛用作包装动物.在南美洲,骆驼仍然被用作负担的野兽,以及用于生产纤维和肉类.完整成长的全尺寸美洲驼的高度在头顶5.5英尺(1.6米)到6英尺(1.8米)之间.它们的重量可达280磅左右(127公斤)和450磅(204公斤).出生时,婴儿骆驼(称为cria)的重量可达20磅(9公斤)到30磅(14公斤).
  • 按OK按钮.应出现一个消息框,说"描述必须是512个字符或更少"
  • 将描述设置为"'); DELETE FROM WIDGET WHERE 1 = 1;" 在"描述"字段中.按OK按钮.
  • 在最左侧的树视图中,应该出现名为"A-008"的新窗口小部件.
  • 在应用程序的第二个实例中激活一个窗口,并确认Widget"A-008"也自动出现在该树视图中.
  • 在应用程序的第一个实例中,右键单击"Widgets"节点.在随后的上下文菜单中,激活"创建新窗口小部件"菜单项.应激活"新窗口小部件"窗口.
  • 将名称设置为"A-008",然后按OK.必须出现一个消息框,说"已存在具有此名称的小部件.请选择另一个小部件名称".
  • 按此消息框上的确定按钮,然后按取消按钮退出"创建小组件"对话框.
  • 在第二个实例中显示小部件"A-008"的小部件页面.
  • 在第一个实例中,按"撤消"菜单项
  • 确认第二个实例现在正在显示起始页面.
  • .................等等..............

每个示例都测试您可以创建新窗口小部件.在第三个测试中,我正在测试作为一名经验丰富的程序员的功能,认为"好的,所有的地方都可以出现错误",并检查每一个.第三个是否适合客户验收测试?

多么全面的"太全面"?

acceptance-testing user-acceptance-testing

16
推荐指数
1
解决办法
4303
查看次数

ClickOnce应用程序和Windows防火墙

在我看来,ClickOnce应用程序无法与Windows防火墙一起顺利运行.

我已成功使用ClickOnce部署两年.现在,企业已升级到Windows 7,这已成为绊脚石.每个用户的配置都已更改:

  • 在每个用户的计算机上启用Windows防火墙
  • 用户在其计算机上没有管理员权限.

以下是ClickOnce的工作原理:每次更新ClickOnce应用程序时,都会将可执行文件复制到新目录中.该目录具有机器生成的名称.(例如,它可能部署到"C:\ Users\andrew.shepherd\AppData\Local\Apps\2.0\GTTG5EJB.AVG\jc69hir.e45\watershedclient.exe").

默认情况下,Windows防火墙会阻止应用程序接受传入呼叫.但是,当应用程序首次尝试此操作时,Windows防火墙会弹出一个对话框,允许管理员为应用程序创建例外,为其提供所需的权限.

问题是,Windows防火墙将应用程序记录存储为完整文件路径.每次更新ClickOnce应用程序时,它都会安装到其他目​​录.因此,Windows防火墙将其视为一个全新的应用程序.管理员现在必须为其更新的每台计算机配置此更新的防火墙.这有效地打败了我们使用ClickOnce技术的全部原因.

这在2005年被标记为一个问题,微软承认了这个问题,并承认没有解决方案.

这个问题已经解决了吗?

clickonce firewall windows-firewall

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

获取最近发生的星期天

我需要在星期日从日历视图中显示当前周.

在Javascript中确定"最后一个星期天"最安全的方法是什么?

我使用以下代码计算它:

Date.prototype.addDays = function(n) {
      return new Date(this.getTime() + (24*60*60*1000)*n);
}

var today = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var lastSunday = today.addDays(0-today.getDay());
Run Code Online (Sandbox Code Playgroud)

该代码假设每天包含二十四小时.这是正确的,除非是夏令时交叉日,在这种情况下,这一天可能是二十三或二十五小时.

本周,在澳大利亚悉尼,我们将时钟向前推进了一个小时.结果,我的代码计算lastSunday在星期六23:00.

那么上周日确定最安全,最有效的方法是什么?

javascript datetime date

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

通过LINQ生成二维数组

我正在尝试创建一个双精度矩阵,表示实体之间的相关性.

这是我通过LINQ做的方式

double[][] correlationsRaw = (from e in entitiesInOrder
                              select
                                (from f in entitiesInOrder
                                     select correlations.GetCorrelation(e, f)
                                ).ToArray()).ToArray();
Run Code Online (Sandbox Code Playgroud)

这很好.

但我想要的是一个二维数组(双[,]),而不是锯齿状数组.

显然,我可以编写一些嵌套的for循环来将一个转换为另一个.

但是我可以在这里使用一些优雅的LINQ技巧吗?

linq multidimensional-array

13
推荐指数
1
解决办法
6954
查看次数

接收从Web页面拖动到WPF窗口的图像

我希望我的WPF应用程序成为放置目标,我希望能够从任何网页拖动图像.

当从网页拖动图像时,显然它是"DragImageBits"格式,可以反序列化以键入ShDragImage.(请参阅问题的底部,了解我如何定义它)

如何将其转换为WPF图像?

这是我目前的尝试.(如果有人知道做出绝望的正确方法,我全都耳朵)

   private void UserControl_Drop(object sender, System.Windows.DragEventArgs e)
    {

            string[] formats = data.GetFormats();

            // DragImageBits
            if (formats.Contains("DragImageBits"))
            {
            MemoryStream imageStream = data.GetData("DragImageBits") as MemoryStream;

            // Now I'm deserializing this, the only way I know how
            imageStream.Seek(0, SeekOrigin.Begin);
            BinaryReader br = new BinaryReader(imageStream);

            ShDragImage shDragImage;
            shDragImage.sizeDragImage.cx = br.ReadInt32();
            shDragImage.sizeDragImage.cy = br.ReadInt32();
            shDragImage.ptOffset.x = br.ReadInt32();
            shDragImage.ptOffset.y = br.ReadInt32();
            shDragImage.hbmpDragImage = new IntPtr(br.ReadInt32());
            shDragImage.crColorKey = br.ReadInt32();


            var systemDrawingBitmap = System.Drawing.Bitmap.FromHbitmap(shDragImage.hbmpDragImage);
Run Code Online (Sandbox Code Playgroud)

在这一点上,我得到一个类型的例外,System.Runtime.InteropServices.ExternalException消息就是这样Generic GDI+ error.

有谁知道我应该做什么?


以下是支持类定义.我从 …

.net wpf drag-and-drop bitmap winforms

13
推荐指数
1
解决办法
2683
查看次数

在WPF中实现"向下滑动"动画

我正在尝试为Expander控件创建自己的模板.当控件展开时,我希望内容缓慢滑下.

在编译时不知道内容的期望高度.

我以为我们可以将幻灯片定义为动画:

<Storyboard x:Key="ExpandContent">

    <DoubleAnimation 
        Storyboard.TargetName="_expanderContent" 
        Storyboard.TargetProperty="Height" 
        From="0.0" 
        To="{Binding ElementName=_expanderContent,Path=DesiredHeight}"
        Duration="0:0:1.0" />
</Storyboard>
Run Code Online (Sandbox Code Playgroud)

但不幸的是没有.我们收到错误

无法冻结此Storyboard时间轴树以跨线程使用.

看来我们在定义动画参数时不能使用绑定.(也在这个问题中讨论过.)

有没有人对我如何处理这个有任何想法?我担心使用LayoutTransform.ScaleY,因为这会产生扭曲的图像.

这与此问题类似,但这个问题的答案涉及编写代码隐藏,我认为在控件模板中是不可能的.我想知道基于XAML的解决方案是否可以实现.


对于它的价值,这是我的控件模板的当前状态.

<ControlTemplate x:Key="ExpanderControlTemplate"  TargetType="{x:Type Expander}">
    <ControlTemplate.Resources>
            <!-- Here are the storyboards which don't work -->
            <Storyboard x:Key="ExpandContent">

                <DoubleAnimation 
                    Storyboard.TargetName="_expanderContent" 
                    Storyboard.TargetProperty="Height" 
                    From="0.0" 
                    To="{Binding ElementName=_expanderContent,Path=DesiredHeight}"
                    Duration="0:0:1.0" />
            </Storyboard>
            <Storyboard x:Key="ContractContent">

                <DoubleAnimation 
                    Storyboard.TargetName="_expanderContent" 
                    Storyboard.TargetProperty="Height" 
                    From="{Binding ElementName=_expanderContent,Path=DesiredHeight}"
                    To="0.0"
                    Duration="0:0:1.0" />

            </Storyboard>
        </ControlTemplate.Resources>
    <Grid Name="MainGrid" Background="White">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Name="ContentRow" Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" …
Run Code Online (Sandbox Code Playgroud)

wpf animation controltemplate

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