Tag: .net

ShouldSerialize *()vs *指定的条件序列化模式

我知道ShouldSerialize *模式和* Specified模式以及它们是如何工作的,但两者之间有什么区别吗? 当某些事物应该有条件地序列化时,是否有任何“陷阱”使用一种方法而不是另一种方法? 此问题特定于XmlSerializer的用法,但也欢迎有关此主题的一般信息。 关于这个主题的信息非常少,所以可能是因为它们执行完全相同的目的而且它是一种风格选择。 但是,.NET实现者通过reflection分析类并查找其中一个/两个模式来确定生成的序列化程序的行为,因为它减慢了序列化程序的生成,除非它只是一个向后兼容性工件,这似乎很奇怪。 编辑:对于那些不熟悉这两种模式的人,如果*Specified属性或ShouldSerialize*方法返回true,则该属性被序列化。 public string MyProperty { get; set; } //*Specified Pattern [XmlIgnore] public bool MyPropertySpecified { get{ return !string.IsNullOrWhiteSpace(this.MyProperty); } } //ShouldSerialize* Pattern public bool ShouldSerializeMyProperty() { return !string.IsNullOrWhiteSpace(this.MyProperty); }

父控制鼠标使用子控件输入/离开事件

我有一个C#.NET 2.0 WinForms应用程序。 我的应用程序有一个控件,它是两个子控件的容器:标签和某种编辑控件。 您可以这样想,外框是父控件: + ——————————— + | [标签控制] [编辑控制] | + ——————————— + 我试图在鼠标进入或离开父控件时执行某些操作,但我不在乎鼠标是否移动到其中一个子控件中。 我想要一个标志来表示“鼠标在父或子中的某个位置”和“鼠标移动到父控件边界之外”。 我已尝试在父控件和两个子控件上处理MouseEnter和MouseLeave,但这意味着当鼠标移过控件时,操作会多次开始和结束。 换句话说,我明白了: Parent.OnMouseEnter(开始做某事) Parent.OnMouseLeave(停止) Child.OnMouseEnter(开始做某事) Child.OnMouseLeave(停止) Parent.OnMouseEnter(开始做某事) Parent.OnMouseLeave(停止) 中间的OnMouseLeave事件会导致一些不良影响,因为我正在做的事情开始然后停止。 我想避免这种情况。 我不想捕获鼠标,因为父控件需要鼠标移动,因为子控件需要鼠标事件,我想要菜单和其他快捷键才能工作。 有没有办法在.NET框架内执行此操作? 或者我需要使用Windows鼠标挂钩?

如何模拟非虚方法?

[TestMethod] public void TestMethod1() { var mock = new Mock(); mock.Setup(x => x.SendEmail()).Returns(true); var cus = new Customer(); var result = cus.AddCustomer(mock.Object); Assert.IsTrue(result); } public class Customer { public bool AddCustomer(EmailService emailService) { emailService.SendEmail(); Debug.WriteLine(“new customer added”); return true; } } public class EmailService { public virtual bool SendEmail() { throw new Exception(“send email failed […]

跨线程操作无效

可能重复: 跨线程操作无效:从创建它的线程以外的线程访问控制 好的,我知道为什么这会给我这个错误: 跨线程操作无效:控制从其创建的线程以外的线程访问的“Form1”。 但是……我怎样才能使这个可行? System.Threading.Thread t = new System.Threading.Thread(()=> { // do really hard work and then… listView1.Items.Add(lots of items); lots more UI work }); t.Start(); 我不关心Thread何时或如何完成,所以我并不关心任何花哨或过于复杂的atm,除非它在使用新线程中的UI时会更容易。