Tag: .net

软件渲染模式 – WPF

我有一个WPF用户控件,我需要在RenderMode.SoftwareOnly强制渲染。 由于我使用的是.NET 3.5,我不得不做类似的事情, var hwndSource = PresentationSource.FromVisual(this) as HwndSource; if (hwndSource != null) { hwndSource.CompositionTarget.RenderMode = RenderMode.SoftwareOnly; } 但这不适用于我的应用程序,WPF程序在少数计算机上崩溃,关闭注册表级别的硬件加速似乎解决了这个问题。 上面的代码是在窗口的Loaded事件中编写的。 如果我是正确的,则在呈现控件( MSDN )之后发生Loaded事件。 那么在这个事件中有上面的代码是否有意义? 如果没有,哪个事件适合它? 另外,在视觉上设置RenderMode会影响它的孩子吗? 或者我是否需要为每个子元素专门设置它? 任何帮助都会很棒!

C#编译器是否足够智能以优化此代码?

请忽略此问题中的代码可读性。 在性能方面,如下所示代码应如下所示: int maxResults = criteria.MaxResults; if (maxResults > 0) { while (accounts.Count > maxResults) accounts.RemoveAt(maxResults); } 或者像这样: if (criteria.MaxResults > 0) { while (accounts.Count > criteria.MaxResults) accounts.RemoveAt(criteria.MaxResults); } ? 编辑: criteria是一个class , MaxResults是一个简单的整数属性(即public int MaxResults { get { return _maxResults; } } 。 C#编译器是否将MaxResults视为黑盒并每次评估它? 或者它是否足够聪明,可以发现我有3次调用同一个属性而没有在调用之间修改该属性? 如果MaxResults是一个领域怎么办? 优化法则之一是预先计算,所以我本能地像第一个列表那样编写这个代码,但我很好奇是否自动为我做了这种事情(再次,忽略代码可读性)。 (注意:我对听到“微优化”论证不感兴趣,这个论点可能在我发布的具体案例中有效。我只是想了解正在发生或未发生的事情的一些理论。)

使实体类关闭以进行更改

我有一个数据库关系,如下所示。 域对象是基于LINQ to SQL ORM创建的。 付款包括现金付款和礼品券付款。 假设购买总额为550.可以按以下组件支付 1 Gift Coupon Valued 300 1 Gift Coupon Valued 200 I Cash Currency Valued 50 我正在使用ORM的“InsertOnSubmit”function插入新的付款记录。 以下代码工作正常。 但是,如果我公司使用信用卡引入新的支付组件,我需要更改我的“付款”域类。 如何使支付类打开以进行扩展并关闭仍在使用ORM的 更改 ? 注意:Payment类具有行为 (例如GetTotalAmountCollected)。 我正在努力使“付款”类满足OCP。 注意:优惠券类型有特定的行为 。 优惠券发行日期是否小于2000年1月1日,不应用于计算总金额(即,CouponValue应为零)。 请参阅使用策略模式重构代码 。 注意:我使用的是.Net 4.0 参考: 将ObjectContext.AddObject与Entity Framework一起使用时出错 使用策略模式重构代码 喜欢构成而不是inheritance? 代码优先与模型/数据库优先 使用Unity的策略模式和dependency injection 委托与OOP的C#策略设计模式 如何在C#中使用策略模式? EF代码优先inheritance:第2部分 – 每种类型的表(TPT) http://weblogs.asp.net/manavi/archive/2010/12/28/inheritance-mapping-strategies-with-entity-framework-code-first -ctp5部分-2-表每类型tpt.aspx C#代码: public […]

如何将方法标记为已过时或已弃用?

如何使用C#将方法标记为已过时或已弃用?

检查文件/文件夹访问权限

我得到一个运行此代码的UnautorizedAccessException : string[] fileList = Directory.GetFiles(strDir, strExt); c:\users\username\appdata发生exception如何检查我是否具有访问权限(列出和读取文件)?

为什么我不能将List 分配给List ?

我定义了以下类: public abstract class AbstractPackageCall { … } 我还定义了这个类的子类: class PackageCall : AbstractPackageCall { … } AbstractPackageCall还有其他几个子节点 现在我想进行以下调用: List calls = package.getCalls(); 但我总是得到这个例外: Error 13 Cannot implicitly convert type ‘System.Collections.Generic.List’ to ‘System.Collections.Generic.List’ 这里有什么问题? 这是Package#getCalls的方法 internal List getCalls() { return calls; }

如何通过XML序列化来了解何时加载?

我正在尝试通过XML序列化加载一个对象树,此时它将加载对象,并非常愉快地创建树。 我的问题围绕着这些类支持一定级别的审计这一事实。 我希望能够做的是在每个对象加载完成后调用一些方法。 为了论证,假设我有一个相当通用的对象树,在不同的级别有不同的类,如: 123 Any Street 456 High Street 有没有办法使用默认的序列化器(以类似的方式创建像ShouldSerializeFoo这样的方法)来确定每个对象的加载何时完成? 编辑:我应该指出,暴露类似于反序列化后我可以调用的OnLoaded()方法的明显案例,让我觉得这是一件“坏事”。 Edit2:为了讨论起见,这是我当前的hack “方法”,它适用于基本级别,但子City节点仍然认为需要保存更改(在现实世界中,对象模型要复杂得多) ,但这至少会编译,而不需要完整的源代码) public class Office { [XmlAttribute(“IsHq”)] public bool IsHeadquarters { get; set; } [XmlElement] public string Street { get; set; } [XmlElement] public Town Town { get; set; } protected virtual void OnLoaded() {} public static OfficeCollection Search() { OfficeCollection retval […]

循环中的Lambda变量捕获 – 这里发生了什么?

我想试试看,这里发生了什么? 编译器生成什么样的代码? public static void vc() { var listActions = new List(); foreach (int i in Enumerable.Range(1, 10)) { listActions.Add(() => Console.WriteLine(i)); } foreach (Action action in listActions) { action(); } } static void Main(string[] args) { vc(); } 输出: 10 10 .. 10 据此,将为每次迭代创建一个ActionHelper的新实例。 那么在这种情况下,我认为它应该打印1..10。 有人能给我一些编译器在这里做的伪代码吗? 谢谢。

并行执行任务

好吧,基本上我有一堆任务(10),我想同时启动所有任务并等待它们完成。 完成后我想执行其他任务。 我读了很多关于这方面的资源,但我无法为我的具体情况做好准备…… 这是我目前拥有的(代码已经简化): public async Task RunTasks() { var tasks = new List { new Task(async () => await DoWork()), //and so on with the other 9 similar tasks } Parallel.ForEach(tasks, task => { task.Start(); }); Task.WhenAll(tasks).ContinueWith(done => { //Run the other tasks }); } //This function perform some I/O operations public async Task […]

正则表达式嵌套括号

我有以下字符串: a,b,c,de(f,g,h,i(j,k)),l,m,n 会不会告诉我如何构建一个正则表达式,只返回括号的“第一级”,如下所示: [0] = a,b,c, [1] = de(f,g,h,ij(k,l)) [2] = m,n 目标是保持括号中具有相同索引的部分嵌套以操纵未来。 谢谢。 编辑 试图改进这个例子…… 想象一下,我有这个字符串 username,TB_PEOPLE.fields(FirstName,LastName,TB_PHONE.fields(num_phone1, num_phone2)),password 我的目标是将字符串转换为动态查询。 那么不以“TB_”开头的字段我知道它们是主表的字段,否则我知道括号内的信息字段与另一个表相关。 但是我很难检索所有字段“第一级”,因为我可以将它们从相关表中分离出来,我可以递归地恢复剩余的字段。 最后,会有类似的东西: [0] = username,password [1] = TB_PEOPLE.fields(FirstName,LastName,TB_PHONE.fields(num_phone1, num_phone2)) 我希望我已经解释得更好了,抱歉。