我正在看这段代码
var numbers = Enumerable.Range(0, 20);
var parallelResult = numbers.AsParallel().AsOrdered()
.Where(i => i % 2 == 0).AsSequential();
foreach (int i in parallelResult.Take(5))
Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)
本AsSequential()应该做排序的结果数组.实际上它在执行后被排序,但如果我删除了调用AsSequential(),它仍然被调整(自AsOrdered()).
两者有什么区别?
在www.dofactory.com上,我找到了一个真实的工厂模式示例.但是代码在ReSharper中生成关于构造函数中的虚拟成员调用的警告.
导致警告的代码如下:
abstract class Document
{
private List<Page> _pages = new List<Page>();
// Constructor calls abstract Factory method
public Document()
{
this.CreatePages(); // <= this line is causing the warning
}
public List<Page> Pages
{
get { return _pages; }
}
// Factory Method
public abstract void CreatePages();
}
class Resume : Document
{
// Factory Method implementation
public override void CreatePages()
{
Pages.Add(new SkillsPage());
Pages.Add(new EducationPage());
Pages.Add(new ExperiencePage());
}
}
Run Code Online (Sandbox Code Playgroud)
在消费代码中,您可以简单地使用:
Document document = new Resume();
Run Code Online (Sandbox Code Playgroud)
我不明白为什么这是一个坏主意,调用构造一个虚拟的成员(如解释 …
我正在攻读MS 70-515考试.在其中一个实践中,作者实现了隐式和显式的接口.显式实现只调用隐式实现.刚才列出了显式实现而没有解释.
同时拥有接口的隐式和显式实现是否有意义?我认为显式实现是多余的(在这种情况下).
public class PassTextBox : TextBox, IScriptControl
{
public virtual IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
var descriptor = new ScriptControlDescriptor(
"AjaxEnabled.PassTextBox", ClientID);
// ...
return new ScriptDescriptor[] {descriptor};
}
IEnumerable<ScriptDescriptor> IScriptControl.GetScriptDescriptors()
{
return GetScriptDescriptors();
}
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,代码似乎在没有显式实现的情况下运行得很好,因为隐式实现是公开的.
它涉及MCTS Self-Paced Training Kit(考试70-515):使用Microsoft .NET Framework进行Web应用程序开发4第9章,第2课,练习3.
为什么设置SelectedValue的ComboBox,以null引起ArgumentNullException?
仅当ComboBox实际上是表单的一部分时才会发生异常.我可以设置SelectedValue各种没有意义的值或类型,但我无法设置它null.
这SelectedValue不是不可能的null.事实上,它的价值是 null在我试图将其设置为时null.
在我的真实代码中,这不会发生在构造函数中,而且我并没有明确地将其设置为null.代码正在使用恰好是的变量null.我可以通过null在尝试设置之前检查变量来修复它SelectedValue.但我不明白的是为什么我不能把它设置为一个null值.
代码编辑:DataSource现在包含ValueMembers值实际的项目null
using System.Collections.Generic;
using System.Windows.Forms;
public class Form1 : Form {
public Form1() {
var comboBox1 = new ComboBox();
Controls.Add(comboBox1);
comboBox1.ValueMember = "Key";
comboBox1.DisplayMember = "Value";
comboBox1.DataSource = new List<Record> {
new Record {Key = "1", Value = "One"},
new Record …Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义结构来表示金额.它基本上是一个包装器decimal.它有一个隐式转换运算符将其强制转换为decimal.
在我的单元测试中,我断言Amount等于原始十进制值,但测试失败.
[TestMethod]
public void AmountAndDecimal_AreEqual()
{
Amount amount = 1.5M;
Assert.AreEqual(1.5M, amount);
}
Run Code Online (Sandbox Code Playgroud)
当我使用int(我没有创建转换运算符)时,测试确实成功.
[TestMethod]
public void AmountAndInt_AreEqual()
{
Amount amount = 1;
Assert.AreEqual(1, amount);
}
Run Code Online (Sandbox Code Playgroud)
当我悬停时AreEqual,它显示第一个解析为
public static void AreEqual(object expected, object actual);
Run Code Online (Sandbox Code Playgroud)
而第二个导致
public static void AreEqual<T>(T expected, T actual);
Run Code Online (Sandbox Code Playgroud)
看起来这个int值1是隐式地转换为a Amount,而decimal值1.5M则不是.
我不明白为什么会这样.我本来希望恰恰相反.第一次单元测试应该能够投射decimal到Amount.
当我添加隐式强制转换int(没有意义)时,第二个单元测试也会失败.因此,添加隐式强制转换运算符会破坏单元测试.
我有两个问题:
Amount结构,以便两个测试都能成功?(我知道我可以改变测试来做一个明确的转换,但如果我不是绝对必须,我不会)
我的Amount结构(只是一个显示问题的最小实现)
public struct Amount …Run Code Online (Sandbox Code Playgroud) 我想知道我在Windows窗体应用程序中调用DoDragDrop方法的控件是否有任何区别.
我有一个带有两个PictureBox控件的Form.可以拖动一个,另一个将其AllowDrop属性设置为true.
可拖动PictureBox的MouseDown事件处理程序如下:
private void dragPictureBox_MouseDown(object sender, MouseEventArgs e)
{
if (sender is PictureBox)
{
var pictureBox = (PictureBox) sender;
var effect = pictureBox.DoDragDrop(
pictureBox.Image, DragDropEffects.All);
MessageBox.Show("Drag ended in a " + effect);
}
}
Run Code Online (Sandbox Code Playgroud)
但是我没有在pictureBox上调用DoDragDrop,我似乎可以使用任何控件,例如Form本身
var effect = this.DoDragDrop(pictureBox.Image, DragDropEffects.All);
Run Code Online (Sandbox Code Playgroud)
甚至
var effect = label1.DoDragDrop(pictureBox.Image, DragDropEffects.All);
Run Code Online (Sandbox Code Playgroud)
对我称之为DoDragDrop方法的控件有什么不同?如果是这样,有什么区别?
我试图找到一种方法让Resharper格式化这样的switch语句(使用Ctrl + E,Ctrl + C):
switch (int_i) {
case 1 : Console.WriteLine("You entered one");
break;
case 2 : Console.WriteLine("You entered two");
break;
case 3 : Console.WriteLine("You entered three");
break;
default : Console.WriteLine("Please enter a number between 1 and 5");
break;
}
Run Code Online (Sandbox Code Playgroud)
我个人根本不喜欢这种风格,但它正在我正在研究的一本书中使用,我希望Resharper帮助我以同样的方式格式化我的代码.
这里有两点需要注意:
default比case 3在冒号之前必须有一个额外的空间更长case 1,case 2并且case 3.Resharper能做到这一点吗?
我正在使用Resharper 5.1.1来重新格式化我的代码(清理代码,Ctrl + E,Ctrl + C).我无法按照我想要的方式格式化我的代码.我希望我的代码看起来像这样:
public class Person
{
public enum Sex {Male, Female}
public Sex Gender { get; set; }
public Person(Sex gender)
{
Gender = gender;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是enum.由于枚举是一种类型,因为类是一个类型,它们被视为相同.因此,枚举格式为
public enum Sex
{
Male,
Female
}
Run Code Online (Sandbox Code Playgroud)
类型的花括号(即enum)放在一个单独的行上,成员也放在一个单独的行上.对于一个正是我想要的类.但对于(简单)enum我只想在一条线上.
对于auto属性,有一个异常(在单行上放置抽象属性/索引器/事件声明),因此auto属性按照我希望的方式进行格式化.
Resharper中是否有一个选项可以将枚举放在一行上?
更新 在Resharper论坛上发布相同的问题后,我被告知它目前是不可能的.一个功能要求已经为它创建.如果您还认为这是一个您希望在未来版本的Resharper中看到的选项,请投票支持该请求.
我用MenuStrip创建一个简单的表单.MenuStrip LayoutStyle设置为HorizontalStackWithOverflow(默认值).
根据MenuStrip上的MSDN参考,其LayoutStyle属性继承自ToolStrip.LayoutStyle的一个可能值HorizontalStackWithOverflow是默认设置.此设置应提供其Overflow属性设置为AsNeeded的项目移动到溢出按钮.
当我运行应用程序并调整窗体大小以使菜单不完全适合时,这不会发生.我已将ToolStripMenuItems溢出属性设置为AsNeeded,但是当我调整窗体大小时,右侧的菜单项就会消失.
文档是否错误,您是否只能在ToolStrip上获得溢出按钮而不是在MenuStrip上?或者,为了让事情有效,我还需要做些什么吗?或者我只是误读了文档?
如果我!在一个类中重载操作符,它应该返回什么类型?在一本书中我找到了这个(部分列表):
public class MyType {
public int IntField { get; set; }
public MyType(int intField) {
IntField = intField;
}
public static bool operator !(MyType mt) {
return (mt.IntField <= 0);
}
Run Code Online (Sandbox Code Playgroud)
它确实编译,但我希望!运算符返回一个MyType实例,如
public static MyType operator !(MyType mt) {
var result = new MyType(-mt.IntField);
return result;
}
Run Code Online (Sandbox Code Playgroud)
实际上,我希望编译器要求!运算符返回一个MyType.但事实并非如此.
那么......为什么!运算符的返回类型不必是包含类型?你也必须做的返回类型++或者--是包含类型.
c# ×9
winforms ×3
formatting ×2
resharper ×2
.net ×1
combobox ×1
controls ×1
datasource ×1
explicit ×1
implicit ×1
interface ×1
menustrip ×1
plinq ×1
struct ×1
unit-testing ×1