我正在尝试使用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实现这种交错合并的替代/简单方法?
我试图在我的自动化测试中使用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,丢弃已经注册的组件?
Container.Register(
Classes.FromThisAssembly()
.BasedOn<IEmptyService>()
.WithService.Base()
.ConfigureFor<EmptyServiceA>(c => c.IsDefault()));
Run Code Online (Sandbox Code Playgroud)
ConfigureFor是一种BasedOnDescriptor类的方法.在我的情况下,我没有使用FromDescriptor或BasedOnDescriptor.
我正在尝试使用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.有什么方法可以帮助它吗?
我正在WPF应用程序中创建一个标准菜单.
我知道我可以创建自定义命令,但我知道还有一堆标准命令要绑定.
例如,要打开一个文件,我应该绑定到ApplicationCommands.Open,关闭一个文件,我应该绑定到ApplicationCommands.Close.还有大量的EditCommands,ComponentCommands或NavigationCommands.
似乎没有"退出"命令.我本来期望有ApplicationCommands.Exit.
我应该将什么绑定到"退出"菜单项?要为某些东西创建自定义命令,这个通用似乎是错误的.
这是一个测试描述,测试"Create New Widget"用例.
这是另一个测试描述,测试"Create New Widget"用例.
这是另一个测试描述,测试"Create New Widget"用例.
每个示例都测试您可以创建新窗口小部件.在第三个测试中,我正在测试作为一名经验丰富的程序员的功能,认为"好的,所有的地方都可以出现错误",并检查每一个.第三个是否适合客户验收测试?
多么全面的"太全面"?
在我看来,ClickOnce应用程序无法与Windows防火墙一起顺利运行.
我已成功使用ClickOnce部署两年.现在,企业已升级到Windows 7,这已成为绊脚石.每个用户的配置都已更改:
以下是ClickOnce的工作原理:每次更新ClickOnce应用程序时,都会将可执行文件复制到新目录中.该目录具有机器生成的名称.(例如,它可能部署到"C:\ Users\andrew.shepherd\AppData\Local\Apps\2.0\GTTG5EJB.AVG\jc69hir.e45\watershedclient.exe").
默认情况下,Windows防火墙会阻止应用程序接受传入呼叫.但是,当应用程序首次尝试此操作时,Windows防火墙会弹出一个对话框,允许管理员为应用程序创建例外,为其提供所需的权限.
问题是,Windows防火墙将应用程序记录存储为完整文件路径.每次更新ClickOnce应用程序时,它都会安装到其他目录.因此,Windows防火墙将其视为一个全新的应用程序.管理员现在必须为其更新的每台计算机配置此更新的防火墙.这有效地打败了我们使用ClickOnce技术的全部原因.
这在2005年被标记为一个问题,微软承认了这个问题,并承认没有解决方案.
这个问题已经解决了吗?
我需要在星期日从日历视图中显示当前周.
在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.
那么上周日确定最安全,最有效的方法是什么?
我正在尝试创建一个双精度矩阵,表示实体之间的相关性.
这是我通过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技巧吗?
我希望我的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.
有谁知道我应该做什么?
我正在尝试为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)