Tag: .net 4.0

这是ConcurrentDictionary和ConcurrentQueue线程安全的组合吗?

我在以下代码中使用.NET 4中的ConcurrentDictionary和ConcurrentQueue类。 这段代码是线程安全的吗? 如果没有,我怎样才能使它成为线程安全的? public class Page { public string Name {get; set; } } public class PageQueue { private ConcurrentDictionary<int, ConcurrentQueue> pages = new ConcurrentDictionary<int, ConcurrentQueue>(); public void Add(int id, Page page) { if (!this.pages.ContainsKey(id)) this.pages[id] = new ConcurrentQueue(); this.pages[id].Enqueue(page); } public Page GetAndRemove(int id) { Page lp = null; if(this.pages.ContainsKey(id)) this.pages[id].TryDequeue(out lp); return […]

用于重构安全的ArgumentException的Lambda表达式

更新 :这不再是来自C#6的问题,它引入了nameof运算符来解决此类情况(请参阅MSDN )。 注意 :有关此问题的一般化以及一些答案,请参阅“ 通过lambda表达式在运行时获取局部变量(和参数)的名称 ”。 我喜欢使用lambda表达式创建INotifyPropertyChanged接口的重构安全实现的想法,使用类似于Eric De Carufel提供的代码。 我正在尝试实现类似的东西,以便以重构安全的方式为ArgumentException (或其派生类)提供参数名称。 我已经定义了以下实用方法来执行null检查: public static void CheckNotNull(Expression<Func> parameterAccessExpression) { Func parameterAccess = parameterAccessExpression.Compile(); T parameterValue = parameterAccess(); CheckNotNull(parameterValue, parameterAccessExpression); } public static void CheckNotNull(T parameterValue, Expression<Func> parameterAccessExpression) { if (parameterValue == null) { Expression bodyExpression = parameterAccessExpression.Body; MemberExpression memberExpression = bodyExpression as MemberExpression; string parameterName […]

在C#中创建动态扩展方法?

是否可以解决此错误: public static class LayoutExtensions { /// /// Verifies if an object is DynamicNull or just has a null value. /// public static bool IsDynamicNull(this dynamic obj) { return (obj == null || obj is DynamicNull); } 编译时间 Error: The first parameter of an extension method cannot be of type ‘dynamic’

VS2010 / C#中的全局“使用”指令?

我很确定我知道答案,但我想知道是否有办法在我的C#项目中定义全局“使用”指令,这样我就不必在每个代码文件的顶部重复该指令。 我的兴趣实际上源于在.NET Framework中引入扩展方法。 使用扩展方法的唯一方法是为包含扩展方法的命名空间定义using指令。 如果没有using指令,我将失去扩展方法的Intellisensefunction,这意味着我不会总是看到可用的方法。 作为框架开发人员,确保框架中提供的类型和方法清晰可供开发人员使用对我来说至关重要。 虽然文档和培训服务于他们的目的,但我发现大多数开发人员都会遇到这个时期并滚动智能感知列表以查看可用的方法和属性。 即使他们转到对象浏览器或查看参考文档,他们也不会知道扩展方法,除非他们知道它。 这就是Intellisense的用武之地。 而且,虽然我可以将使用指令添加到VS使用的模板,但VS中的“删除并排序”选项将删除引用扩展方法的指令(如果没有使用)。 那么,所有这一切,是否有任何方法可以在VS 2010中定义全局“使用”指令? 如果没有,MS将来会考虑它的任何机会吗?

控制台应用程序C#的关闭事件

我怎么知道我的C#控制台应用程序什么时候停止? 有没有这样的事件? 谢谢!

DateTime.TryParse无法解析DateTime.MinValue

我正在使用一个名为Json.NET的库,它在内部使用以下代码将JSON字符串解析为DateTime: if (DateTime.TryParse(s, Culture, DateTimeStyles.RoundtripKind, out dt)) { dt = DateTimeUtils.EnsureDateTime(dt, DateTimeZoneHandling); SetToken(JsonToken.Date, dt); return dt; } 我认为Json.NET搞砸了转换,但看起来它是DateTime.TryParse本身就是拙劣的价值。 当我解析以下有效的Iso日期(对应于UTC DateTime.MinValue)时: string json = “0001-01-01T00:00:00+00:00”; DateTime dt; DateTime.TryParse(json, invariantCulture, DateTimeStyles.RoundtripKind, out dt); 结果是本地化的DateTime: {0001-01-01 8:00:00 PM} ,当转换回Utc时间时, {0001-01-02 0:00:00 PM} 。 基本上,日期下溢,这正是您期望DateTimeStyles.RoundtripKind要避免的问题。 我该如何避免这种情况?

如何在winforms应用程序中添加饼图?

我想在我的winforms应用程序中添加一个饼图 – 但我在工具箱中找到的唯一图表是常规条形图。 有没有办法将这个条形图形成饼图或通过使用一些现有的.net 4框架库(不安装任何新的库,如“DevExpress”等)将饼图组件添加到我的工具箱中?

有没有办法测试我的转换以避免使用exception?

我正在使用Reflection从DataRows构造任意对象,当橡胶最终遇到道路时,我需要从DataRow获取一个值并将其分配给对象上的属性。 由于DataRows可能包含不支持转换的类型,因此其中许多都会导致必须处理的exception。 例如,DBnulls可能会在DataRow中出现,或者某种数字格式不能很好地转换为另一种,等等。有什么办法可以避免抛出exception吗? (我不会接受巨大的switch语句来检查目标对象属性和源数据中的每种类型组合。) public void Merge(DataRow data) { PropertyInfo[] props = this.GetType().GetProperties(BindingFlags…); foreach (PropertyInfo pi in props.Where(p => T_IsPrimitive(p.PropertyType))) { object src = null; if( dataAsDataRow.Table.Columns.Contains(pi.Name) ) src = ((DataRow)data)[pi.Name]; if (src != null) { if( src.GetType() != pi.PropertyType ) { try { src = Convert.ChangeType(src, pi.PropertyType); } catch(InvalidCastException e) { try { src […]

CodeContracts:可能在空引用上调用方法

我正在使用CodeContracts静态分析工具 。 我的代码: 截图http://sofzh.miximages.com/c%23/r91zq9.png ( ASCII版 ) 该工具告诉我instance.bar可能是一个空引用。 我相信相反。 谁是对的? 我怎么能certificate它错了?

在.Net 4.0中,DirectorySearch能否以允许我翻阅它们的方式返回LDAP结果?

我正在使用C#,并且正在尝试使用DirectorySearch查询极大的Microsoft ActiveDirectory LDAP服务器的组。 因此,在我的应用程序中,我将有一个具有搜索function的分组列表。 当然,每次点击“下一页”时,我都不想通过向我传递这些查询的整个结果集来敲击我的LDAP服务器。 有没有办法,使用DirectorySearch,只检索单个任意页面的结果,而不是在一个方法调用中返回整个结果集? 类似的问题: DirectorySearch.PageSize = 2不起作用 c #Active Directory服务findAll()仅返回1000个条目 存在许多这样的问题,其中有人询问分页(意味着从LDAP服务器到应用服务器),并获得涉及PageSize和SizeLimit的响应。 但是,这些属性仅影响C#服务器和LDAP服务器之间的分页,最后,DirectorySearch唯一相关的方法是FindOne()和FindAll()。 我正在寻找的基本上是“FindPaged(pageSize,pageNumber)”(pageNumber是非常重要的一点。我不只是想要前1000个结果,我想要(例如)第100集1000个结果。应用程序不能等待100,000条记录从LDAP服务器传递到应用服务器,即使它们被分解为1,000条记录块。 我知道DirectoryServices.Protocols有SearchRequest,它(我认为?)允许你使用“PageResultRequestControl”,它看起来像我正在寻找的东西(虽然它看起来像分页信息来自“cookies”,我不确定我应该如何检索)。 但是,如果有一种方法可以做到这一点,而不是重写整个事物而不是使用协议,我宁愿不必这样做。 我无法想象没有办法做到这一点……甚至SQL都有Row_Number。 更新:PageResultRequestControl没有帮助 – 它只是向前和顺序(您必须调用并获得前N个结果,然后才能获得调用获得结果N + 1所需的“cookie”标记)。 但是,cookie看起来确实有某种可重复的排序……在我正在研究的结果集上,我逐个遍历结果,每次cookie都出现了: 1: {8, 0, 0, 0} 2: {11, 0, 0, 0} 3: {12, 0, 0, 0} 4: {16, 0, 0, 0} 当我迭代两次,我得到相同的数字(11,16)。 这让我觉得,如果我能弄清楚这些数字是如何生成的代码,我可以创建一个ad-hoc cookie,这将给我一个我正在寻找的分页。