Tag: .net

使一个对象只能访问同一个程序集中的另一个对象?

每个业务对象都有一个包含sql调用的匹配对象。 我想以这样的方式限制这些sql对象,它们只能由匹配的业务对象使用。 怎么能实现这一目标? 更新 Greg提出了关于可测试性的观点。 由于SqlObjects将包含非常特定于业务流程的sql,因此我不希望它们在多个buiness对象中重用。 (基本的CRUD操作都是代码生成的)有没有办法使SqlObjects只能访问业务程序集中的一个业务对象(如yshuditelu和Greg Beech所示)并将SqlObjects暴露给unit testing程序集?

datagridview中的复杂布局

我正在努力完成这样的事情: 这可以用datagridview吗? 或ListView,或Windows窗体中的任何其他组件? 注意填充和(最重要的)标签在彼此之上。 我怎样才能在C#.NET中实现这一目标?

安全读取long 内容的最快方法,其元素同时更改

当你有一个 long[] myArray = new long[256]; 其项目由多个线程使用更改 Interlocked.Increment(ref myArray[x]) 肯定不可能在某个时间点获取myArray的快照,因为同时存在非锁定写入,所以我不是想要得到它。 那么我真的需要Volatile.Read的每一个元素来获取过去某个时刻的所有值的副本吗? long[] copy = new long[256]; for (int i = 0; i < 256; i++) copy[i] = Volatile.Read(ref myArray[i]); 由于我对某个时间点的快照不感兴趣,过时的值不是问题,但由于64位非易失性读取不是primefaces的,我担心以下可能会给我一个预增量的一半long,和后增量的一半,可能会给出一个从未存在于数组中的值。 long[] copy = new long[256]; for (int i = 0; i < 256; i++) copy[i] = myArray[i]; 那么Volatile.Read变种是正确的选择,因为我不想使用任何锁定?

正则表达式.net拆分

我可以根据2个空格将字符串拆分为两个: string Line = “1 2″; Regex.Split(Line, ” “); => 1,2 我想添加一个例外。 如果’未被[]括起,则仅拆分,如本例所示。 string Line = “1 2 [1 2]”; Regex.Split(Line, ” “); => 1,2,[1 2] 我可以通过正则表达式轻松实现这一目标吗? 顺便说一句,我使用.NET。

使用星期几获取日期

我在使用星期几查找日期时遇到问题。 例如:我有过去约会可以说, Date date= Convert.TodateTime(“01/08/2013”); 2013年1月8日星期二是星期二。 现在我想要本周的星期二约会。 我怎么做 注意:过去的日期是动态的。 它会在每个循环中发生变化。

xml使用它的generics类型序列化generics类

我需要将包含Pair类型的对象的列表序列化为xml。 除了这些值,我还需要序列化它的generics类型( T和U的类型)。 首先,我创建了一个类PairList来保存对的列表,然后我创建了实际的类,它表示一对两个值,键和值。 [XmlRoot(“pairList”)] public class PairList{ [XmlElement(“element”)] public List<Pair> list; public PairList() { list = new List<Pair>(); } } public class Pair { [XmlAttribute(“key”)] public T key; [XmlAttribute(“value”)] public U value; [XmlAttribute(“T-Type”)] public Type ttype; [XmlAttribute(“U-Type”)] public Type utype; public Pair() { } public Pair(T t, U u) { key = t; value […]

MemoryCache.Set返回已删除的缓存项

我正在使用.NET 4.0 MemoryCache类,我想以线程安全的方式添加或替换缓存中的现有项目,但我也想知道我是否已替换现有项目或添加了新项目。 据我所知, Set方法的目的是primefaces地替换缓存中的项目(如果存在),而AddOrGetExisting方法将primefaces地获取现有项目而不替换它。 但是,Set方法不会返回已替换的项目,而只是替换它。 可以将已删除的事件连接到CacheItemPolicy以获取项目,但很难将其与替换它的新项目相匹配。 我可以使用以下方法来近似它,但它看起来有点沉重(因为要求缓存基本上添加一个项目两次),我想询问是否有人知道更简单的方法。 public object SetAndGetExisting(string key, object value, CacheItemPolicy policy, string regionName = null) { lock (_cacheLock) { var existing = _cache.AddOrGetExisting(key, value, policy, regionName); if (existing != null) { _cache.Set(key, value, policy, regionName); return existing; } return null; } }

如何完全禁用已签名的程序集?

我有一个VS.NET 2010解决方案,有几个项目。 我刚刚添加了一个新的库项目(the.library.assembly)。 启动项目是一个网站。 当我运行网站时,我收到此错误: 无法加载文件或程序集“the.library.assembly”或其依赖项之一。 强名称签名无法validation。 程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名。 (HRESULTexception:0x80131045) 这来自哪里? 我没有使用签名的程序集与其他项目,他们工作正常。 —编辑— 实际上,我确实发现了.library.assembly已签名。 这与解决签名问题有关。 我在项目属性中取消选中,并完成了解决方案中的所有项目。 没有签名。 我现在得到了构建错误: Assembly generation failed — Referenced assembly ‘the.library.assembly’ does not have a strong name. 我想也许这与the.library.assembly正在引用的WCF服务有关。 我删除了服务和相关代码。 一切都很好。 我添加了服务。 另一个好的构建。 我将服务相关代码添加回.library.assembly。 仍然建立。 然后我将.library.assembly调用添加到Web应用程序中。 那是我得到上述构建失败的时候。

如何在WinForm应用程序中调试此StackOverflowException?

我有一个winform应用程序。 每隔几秒我检查一些日志文件,读入任何新数据并将任何新数据插入数据库。 当我运行应用程序大约一个小时1/2时,我得到一个StackOverflowException 。 整个期间的日志文件中没有新数据,因此没有新的数据添加到数据库中。 代码在这里出错… if (pictureBox == null) { continue; } if (pictureBox.InvokeRequired) { var toolTip = new ToolTip(); GameServer tempGameFile = gameServer; pictureBox.Invoke(new MethodInvoker( () => toolTip.SetToolTip(pictureBox, string.Format( “{0} : Last Checked: {1}; Last Updated: {2}”, tempGameFile.Name, tempGameFile.CheckedOn.ToLongTimeString(), tempGameFile.UpdatedOn.HasValue ? tempGameFile.UpdatedOn.Value.ToLongTimeString() : “-No Date Set-“)))); } pictureBox.Image = Resources.RedButton; 和pictureBox.Invoke(..)抛出该错误。 那么..我不知道我怎么能想到这一点来弄清楚发生了什么? 有什么建议? […]

DataSource更改之前的DataGridView事件

有没有我可以在DataGridView中触发DataSourceChanging事件。 DataGridView具有DataSourceChanged事件(我相信)在DataSource绑定到DataGridView之后。 我希望在属性改变之前做一些事情。 我的示例代码…… private void LoadGrid() { // I do some things like saving user settings here DtgRefundAssign.DataSource = BLL.GetDataSource(parameter1, parameter2); //Just to illustrate // And restore them after the datasource is bound } 我需要以多种forms做类似的事情。 只要数据源发生变化,只需考虑开发一个执行此操作的通用过程。 恢复部分可以使用DataSourceChanged事件完成…但是我应该处理哪个事件来执行保存部分?