我有一个班级,像这样:
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发布.)
结果很有趣.
鳞片都在赞成Select和Where,约〜30分.
How much do you want to be the disambiguation percentage?
0
Starting benchmarking.
Ties: 0
Where + Select: …
我一直在英特尔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) 我最近升级到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) 在我的正则表达式中,模式是这样的:
@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),"
Run Code Online (Sandbox Code Playgroud)
所以我想知道是否<somename>存在.如果它是一个普通的捕获组,我可以检查捕获组是否大于没有那个/那些捕获组的组数,但是我没有这里的选项.
有人能帮我找到解决方法吗?我不需要它有效率,它只是用于一次性程序用于排序,所以我不介意它是否需要运行一点.它不适用于公共代码.
我正在搞乱匿名类型,我不小心把它输出到控制台上.它看起来基本上是我如何定义它.
这是一个重现它的简短程序:
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) 我有一个项目,我在一个复选框的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)
而且,瞧,当我把它设置为真时,它没有更新!
任何人都可以提出修复,或解释原因?
谢谢,非常感谢.
我正在制作新的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
当我尝试编写一个新using子句时,我注意到Intellisense在其列表中有一个名为的命名空间Standard.但是,这似乎没有成员仔细检查.什么是这个命名空间?
我有一个JSON字符串
{
"Date":"21/11/2010"
"name": "TEST"
"place":"xyz"
}
Run Code Online (Sandbox Code Playgroud)
我想在不使用第三方库的情况下将其转换为C#字典
c# ×8
.net ×2
regex ×2
wpf ×2
assembly ×1
data-binding ×1
intellisense ×1
json ×1
linq ×1
namespaces ×1
performance ×1
sse ×1
tostring ×1
x86 ×1
xaml ×1