小编It'*_*ie.的帖子

为什么Where和Select表现优于Select?

我有一个班级,像这样:

public class MyClass
{
    public int Value { get; set; }
    public bool IsValid { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

实际上它要大得多,但这会重现问题(怪异).

我想得到Value实例有效的总和.到目前为止,我已经找到了两个解决方案.

第一个是:

int result = myCollection.Where(mc => mc.IsValid).Select(mc => mc.Value).Sum();
Run Code Online (Sandbox Code Playgroud)

然而,第二个是:

int result = myCollection.Select(mc => mc.IsValid ? mc.Value : 0).Sum();
Run Code Online (Sandbox Code Playgroud)

我想获得最有效的方法.起初,我认为第二个会更有效率.然后我的理论部分刚入"嗯,一个是O(N + M + M),另一种是O(N + N),第一个应该进行更多的残疾人更好,而第二个应该表现得更好少用".我以为他们会表现得相同.编辑:然后@Martin指出Where和Select结合在一起,所以实际应该是O(m + n).但是,如果你看下面,似乎这是没有关系的.


所以我把它做了测试.

(这是100多行,所以我认为最好将其作为Gist发布.)
结果很有趣.

0%的领带公差:

鳞片都在赞成SelectWhere,约〜30分.

How much do you want to be the disambiguation percentage?
0
Starting benchmarking.
Ties: 0
Where + Select: …

c# linq

145
推荐指数
5
解决办法
5151
查看次数

为什么SSE标量sqrt(x)比rsqrt(x)*x慢?

我一直在英特尔Core Duo上分析我们的一些核心数学,并且在研究平方根的各种方法时,我注意到一些奇怪的事情:使用SSE标量操作,采用倒数平方根并乘以它更快获取sqrt,而不是使用本机sqrt操作码!

我正在测试它的循环类似于:

inline float TestSqrtFunction( float in );

void TestFunc()
{
  #define ARRAYSIZE 4096
  #define NUMITERS 16386
  float flIn[ ARRAYSIZE ]; // filled with random numbers ( 0 .. 2^22 )
  float flOut [ ARRAYSIZE ]; // filled with 0 to force fetch into L1 cache

  cyclecounter.Start();
  for ( int i = 0 ; i < NUMITERS ; ++i )
    for ( int j = 0 ; j < ARRAYSIZE ; ++j )
    {
       flOut[j] = TestSqrtFunction( flIn[j] ); …
Run Code Online (Sandbox Code Playgroud)

floating-point performance x86 assembly sse

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

什么是正则表达式平衡组?

我刚刚阅读了一个关于如何在双花括号中获取数据的问题(这个问题),然后有人提出了平衡组.我还不太确定它们是什么以及如何使用它们.

我读了平衡组定义,但解释很难理解,我仍然对我提到的问题感到困惑.

有人可以简单地解释什么是平衡组以及它们如何有用吗?

.net c# regex balancing-groups

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

ReSharper 7.1"对具有支撑场的属性"将场移动到位

我最近升级到R#7.1并且我遇到了这个问题,其中To Property With Backing Field动作取代了我的支持字段并将它们移到了类的顶部.

例:

第1步:定义一个自动属性:

public class MyClass
{
    //... Lots of members here

    public int MyNewProperty {get;set;} // <- Create auto Property
}
Run Code Online (Sandbox Code Playgroud)

第2步:ReSharper的"带有支持领域的财产"

在此输入图像描述

预期结果:

public class MyClass
{
    //... Lots of members here

    private int _myNewProperty; // <- Backing field immediately above property
    public int MyNewProperty 
    {
       get
       {
           return _myNewProperty;
       }
       set
       {
           _myNewProperty = value;
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

获得的结果:

public class MyClass
{
    private int _myNewProperty; // <- Backing field …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio-2010 resharper-7.1

23
推荐指数
1
解决办法
2379
查看次数

如何检查命名的捕获组是否存在?

在我的正则表达式中,模式是这样的:

@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),"
Run Code Online (Sandbox Code Playgroud)

所以我想知道是否<somename>存在.如果它是一个普通的捕获组,我可以检查捕获组是否大于没有那个/那些捕获组的组数,但是我没有这里的选项.

有人能帮我找到解决方法吗?我不需要它有效率,它只是用于一次性程序用于排序,所以我不介意它是否需要运行一点.它不适用于公共代码.

c# regex

21
推荐指数
1
解决办法
6195
查看次数

ToString如何在匿名类型上工作?

我正在搞乱匿名类型,我不小心把它输出到控制台上.它看起来基本上是我如何定义它.

这是一个重现它的简短程序:

using System;
class Program
{
    public static void Main(string[] args)
    {
        int Integer = 2;
        DateTime DateTime = DateTime.Now;
        Console.WriteLine(new { Test = 0, Integer, s = DateTime });
        Console.ReadKey(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,输出是:

{ Test = 0, Integer = 2, s = 28/05/2013 15:07:19 }
Run Code Online (Sandbox Code Playgroud)

我尝试使用dotPeek进入程序集找出原因,但没有帮助.[1]这是dotPeek'd代码:

// Type: Program
// Assembly: MyProjectName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
// Assembly location: Not telling you! :P
using System;
internal class Program
{
  public static void Main(string[] args)
  {
    Console.WriteLine((object) new …
Run Code Online (Sandbox Code Playgroud)

.net c# anonymous-types tostring

21
推荐指数
3
解决办法
3470
查看次数

WPF DataBinding没有更新?

我有一个项目,我在一个复选框的IsChecked属性绑定代码隐藏中的get/set.但是,当应用程序加载时,由于某种原因它不会更新.好奇,我把它剥离了它的基础,像这样:

//using statements
namespace NS
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private bool _test;
        public bool Test
        {
            get { Console.WriteLine("Accessed!"); return _test; }
            set { Console.WriteLine("Changed!"); _test = value; }
        }
        public MainWindow()
        {
            InitializeComponent();
            Test = true;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

XAML:

<Window x:Class="TheTestingProject_WPF_.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
    <Viewbox>
        <CheckBox IsChecked="{Binding Path=Test, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Viewbox>
</Grid>
Run Code Online (Sandbox Code Playgroud)

而且,瞧,当我把它设置为真时,它没有更新!

任何人都可以提出修复,或解释原因?

谢谢,非常感谢.

c# data-binding wpf

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

Visual Studio Intellisense仅在非常特定的情况下才使用XAML

我正在制作新的UserControl,当我打开它时,XAML无法正常工作.我觉得这很奇怪,因为当我在MainWindow上工作时它工作得很好.所以我检查了我的MainWindow.它仍然在那里工作.也在C#代码中.但是,如果我按CTRL+       它仍然很好.我不太清楚为什么.我去了Tools➾Options➾TextEditor➾XAML➾General,Text Completion部分显示为灰色(例如Auto-List Members等).当我在主窗口看到它时,这也是灰色的,但Intellisense在那里工作.有人能帮助我吗?我的VS版本是VS2012 Express,Update 2.唯一安装的扩展是XNA(使用 "hack").

wpf intellisense xaml visual-studio-express visual-studio-2012

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

什么是命名空间'标准'?

当我尝试编写一个新using子句时,我注意到Intellisense在其列表中有一个名为的命名空间Standard.但是,这似乎没有成员仔细检查.什么是这个命名空间?

c# namespaces using-directives

11
推荐指数
1
解决办法
331
查看次数

将JSON字符串转换为C#字典

我有一个JSON字符串

{
  "Date":"21/11/2010"
  "name": "TEST"
  "place":"xyz"
}
Run Code Online (Sandbox Code Playgroud)

我想在不使用第三方库的情况下将其转换为C#字典

c# json

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