小编Ang*_*ker的帖子

如何使用带有ObservableCollection <T>的Linq/Lambda

我有以下代码,只是循环查找条件并将所有匹配放入一个新的集合:

ObservableCollection<Device> allDevices = GetAllDevices();
ObservableCollection<Device> matchingDevices = new ObservableCollection<Device>();
foreach (Device device in allDevices )
{
    if (device.ID != 5)
        matchingDevices .Add(device);
}
Run Code Online (Sandbox Code Playgroud)

很简单.我尝试将此转换为与Linq扩展方法结合使用的Lambda语句,但它失败了:

var matchingDevices = (ObservableCollection<Device>)allDevices.Where(d => d.ID != 5); 
Run Code Online (Sandbox Code Playgroud)

这失败是因为它无法进行演员表演.我尝试附加.ToList(),但发生了同样的问题.听起来这应该很简单,但我找不到答案.

linq lambda visual-studio-2010 c#-4.0

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

如何拍照并通过电子邮件发送?

我希望用户拍照,然后打开附有照片的电子邮件对话框.到目前为止我得到了这个:

private void btnSubmitPhoto_Click(object sender, EventArgs e) 
{ 
    CameraCaptureTask cameraCaptureTask = new CameraCaptureTask(); 
    cameraCaptureTask.Completed += cameraCaptureTask_Completed; 
    cameraCaptureTask.Show(); 
} 

private void cameraCaptureTask_Completed(object sender, PhotoResult e) 
{ 
    if (e.TaskResult == TaskResult.OK) 
    { 
        currentImage = new BitmapImage(); 
        currentImage.SetSource(e.ChosenPhoto); 

        EmailComposeTask ect = new EmailComposeTask();     
    }             
}    
Run Code Online (Sandbox Code Playgroud)

我没有看到如何向EmailComposeTask添加附件.我错过了什么吗?

c# email windows-phone-7

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

如何动态注入JavaScript函数?

我在工作中使用具有可怕UI的产品并试图通过Chrome中的UserScripts使其变得美味.为此,我试图通过UserScripts机制将JavaScript函数注入页面:

// find the div
var dropDown = document.getElementById("tstGlobalNavigation_ddlChooseProject");

// inject function
dropDown.innerHTML = dropDown.innerHTML + "<script>function gotoIncident(){alert('111')}</script>";        

// inject a button
dropDown.innerHTML = dropDown.innerHTML + "&nbsp;&nbsp;&nbsp;<input type='button' name='btnSearch' value='Go' onClick='javascript:gotoIncident()' >";
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我正在注入一个按钮和一个函数(gotoIncident),当用户单击该按钮时它将触发.

按钮确实出现在屏幕上但是当我点击它时,javascript调试器告诉我gotoIncident没有定义.

我错过了什么?

javascript google-chrome javascript-events userscripts

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

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

当有足够的可用内存时,为什么Java垃圾收集器会启动?

C#dev在这里,被迫处理Java ...我正在连接Java Web服务,这是相当大的内存和CPU.它.

事实:

  • 在Tomcat下运行,它是Java 1.6.x.
  • 它全部在Windows Server 2008 R2上,x64具有32 GB的RAM.
  • Tomcat将拥有16GB的RAM
  • Web Service通常消耗大约6.5 GB.

时不时地,Web服务受到垃圾收集风暴的影响,并且会降低处理速度(由Java Web Service的供应商决定).

我的问题,对Java GC不太了解,这就是为什么如果有足够的RAM可用,GC就会启动.当剩下的内存很少时,是否有一些设置告诉它踢?

我的参考框架是.NET GC,只有在有内存压力时才会启动.

java garbage-collection jvm jdk1.6 windows-server-2008-r2

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

如何提高你不拥有的代码的性能?

我们在一个运行调度算法的可笑的Linux机器上内部有第三方java应用程序.应用程序运行速度太慢,无法满足我们所需的负载.由于货币原因,我们没有代码,供应商也不会对应用程序进行任何更改,因此我无法改进代码.该应用程序是单线程的,其设计不适合并行化(因此我无法在2个盒子之间拆分负载).

无论是软件还是硬件,我能做些什么来提高应用程序的性能?

java linux performance jvm

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

如何在Excel中更改文档的名称?

我有一个名为TIP-PBI.xltm的宏启用模板.当我基于此模板创建文档时,Excel会自动将其命名为TIP-PBI1.但是,我想给它一个自定义名称.

我想我可以通过修改工作簿的.Title属性来做到这一点.为此,在启动时,Workbook_Open事件开始,并执行以下操作:

Private Sub Workbook_Open()
    Dim strPBI As String
    strPBI = InputBox$("Enter PBI", "Enter PBI")

    ThisWorkbook.Title = "TIP-PBI-" & strPBI
End Sub
Run Code Online (Sandbox Code Playgroud)

但是,这没有任何作用.

如何在启动时更改文档的标题?

excel vba excel-vba excel-2010

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

如何组合这两个SQL语句?

我有2个SQL查询,它们都获取不同ID的计数.

select @cntCM_CMQ = count(*)
from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 3    -- CMQ

select @cntCM_PRWK = count(*)
from dbo.CaseWorkflow cw 
join vew_CasePersonnelSystemIDs vcps on cw.ID_Case = vcps.ID_Case
join dbo.WorkflowStates ws on ws.ID_WorkflowState = cw.ID_WorkflowState
where CMSUID = @nSUID and ws.ID_WorkflowType = 1    -- PAPERWORK
Run Code Online (Sandbox Code Playgroud)

似乎我应该能够将它们组合成一个选择(可能带有一个CASE声明),但我似乎无法破解它.

sql sql-server sql-server-2005

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

多线程与顺序处理的效果如何?

我在.NET 4.51,C#Web服务上有一个工作单元,需要100毫秒.通常,Web请求包含10个单位的工作.因此,通过for循环顺序处理它需要大约一秒钟.

foreach (var u in unitsOfWork) {
  Run(u);
}
Run Code Online (Sandbox Code Playgroud)

由于该盒子有12个CPU,我决定将工作拆分并同时运行,希望获得性能提升.我Parallel.ForEach以前做的工作:

Parallel.ForEach(unitsOfWork,u => {
    Run(u);
});    
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,每个工作单元平均花费425毫秒.所以最后我节省了约500毫秒的请求.看起来我应该能够获得更好的性能,看看这个盒子有12个CPU ......我错过了一些简单的东西吗?

我寻找任何共享的东西(可能会把它拿起来),但什么都没找到......所以我试着试验.我发出了2个工作单元的请求,每个工作大约需要125毫秒.有3个请求,每个单元需要150毫秒,依此类推.随后每个单位的数量,罚款约25至30毫秒.

所以要么我做错了什么......或者多线程只有固有的开销(没有意识到它是如此之大).

PS我也尝试用Thread.Join替换Parallel.For - 结果相同.

.net c# multithreading

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

如何将2个物体统一成一个连贯的立面?

我正在使用来自第三方库的2个类,我们称之为Obj1和Obj2.它们具有几乎相同的集合属性和方法,节省了一些.两者都是独立的对象,不会从任何常见的东西继承.

问题是,在我的代码中,我必须为这两个对象提供2个路径,即使我对它们所做的工作是相同的.例:

void Foo1(Obj1 obj) {
     obj.Cost = calcCostObj1(obj);
     obj.Rate = generateRateObj1(obj);
     ... // 50 more lines of this
}

void Foo2(Obj2 obj) {
     obj.Cost = calcCostObj2(obj);
     obj.Rate = generateRateObj2(obj);
     ...
}
Run Code Online (Sandbox Code Playgroud)

当然,我可以重载方法,但它仍然是两种方法几乎每个操作...

不幸的是,我无法修改第三方库.在C#中是否有一种方法(不太可能,我知道),我可以在某种程度上将这两个类统一到一个接口中,这样我就不必有两种方法来处理所有事情.

或者至少使情况具体化.

PS我的梦想场景(目前C#无法实现):

void Foo<T>(T obj) where T: Obj1, Obj2 {
    obj.Cost = calcCostObj<T>(obj);
    obj.Rate = calcRateObj<T>(obj);
}

// calling code
Obj1 obj = new Obj1();
Foo<Obj1>(obj);
Run Code Online (Sandbox Code Playgroud)

c#

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