Tag: c#

如何使用HashSet 作为字典键?

我希望使用HashSet作为Dictionary的键: Dictionary<HashSet, TValue> myDictionary = new Dictionary<HashSet, TValue>(); 我想从字典中查找值,以便包含相同项的两个不同的HashSet实例将返回相同的值。 HashSet的Equals()和GetHashCode()实现似乎没有这样做(我认为它们只是默认值)。 我可以重写Equals()以使用SetEquals()但是GetHashCode()呢? 我觉得我在这里错过了一些东西……

Lucene.net范围查询+突出显示

还有一个极端新手的另一个Lucene.net问题。 这一次,我发现使用包含范围和使用突出显示的查询时会遇到一个有趣的问题。 我是从内存中写的,所以请原谅任何语法错误。 我有一个假设的Lucene索引: ——————————————————— | date | text | ——————————————————— | 1317809124 | a crazy block of text | ——————————————————— | 1317809284 | programmers are crazy | ——————————————————— ** date is a unix timestamp …并且它们已经通过以下方式添加到索引中: Lucene.Net.Documents.Document doc = new Lucene.Net.Documents.Document(); doc.Add(new Lucene.Net.Documents.Field(“text”, “some block of text”, Lucene.Net.Documents.Field.Store.YES, Lucene.Net.Documents.Field.Index.ANALYZED, Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS)); doc.Add(new Lucene.Net.Documents.Field(“date”, “some unix timestamp”, […]

如何在Dynamic Linq中使用Enums?

我想在动态LINQ查询中使用枚举。 是否可能,如果,如何? 考虑下面的代码: using System; using System.Collections.Generic; using System.Linq; using System.Linq.Dynamic; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { Room aRoom = new Room() { Name = “a Room” }; Room bRoom = new Room() { Name = “b Room” }; Room cRoom = new Room() { Name = “c Room” }; […]

在C#内部使用TPL内部服务的基本设计模式

我正在尝试构建Windows服务,它需要某种并行性来汇集来自不同ftp源的文件。 为了启动多个ftp下载,我正在寻找TPL库来轻松地进行foreach循环并使并行性变得非常容易。 但是当我搜索如何启动或停止我的服务时,我最好的资金是在OnStart()方法中创建新线程,如下所述https://stackoverflow.com/a/4865893/69433 阅读有关TPL的信息,请注意TPL比手动线程和手动停止线程更先进。 我没有找到任何描述如何在WindowsService中进行TPL循环的示例post? 我的代码: protected override void OnStart(string[] args) { _thread = new Thread(WorkerThreadFunc); _thread.Name = “My Worker Thread”; _thread.IsBackground = true; _thread.Start(); } 而在WorkerThreadFunc里面做了那种TPL private void WorkerThreadFunc() { foreach (string path in paths) { string pathCopy = path; var task = Task.Factory.StartNew(() => { Boolean taskResult = ProcessPicture(pathCopy); return taskResult; }); task.ContinueWith(t […]

.NETreflection:查找使用的类型

我一直在努力解决这个问题。 我试图做的是在我正在处理的一些代码中构建一个如何使用对象的“映射”。 将其视为增强的查找用法。 显示这个的最简单方法是通过示例: public class MasterClass { Type1 type1; Type2 type2; Type3 type3; void InitializeData() { type1 = new Type1(this); type2 = new Type2(this); type3 = new Type3(this); } } public class Type1 { private MasterClass _master; public Type1(MasterClass master) { _master = master; } public void Something() { //use _master.type2 and _master.type3 here […]

你如何在代码中获得C#(VS 2008)中的解决方案目录?

这里有一个恼人的问题。 我有一个NHibernate / Forms应用程序,我正在通过SVN工作。 我做了一些自己的控件,但是当我拖放那些(或者查看我已经拖放过的一些表单编辑器)到我的其他控件上时,Visual Studio决定它需要执行我编写的一些代码,包括查找hibernate.cfg.xml的部分。 我不知道为什么会这样,但是(有时!)当我在表单加载期间执行代码或拖放它时将当前目录切换到C:\ program files \ vs 9.0 \ common7 \ ide,然后nhibernate抛出一个例外,它无法找到hibernate.cfg.xml,因为我在相对路径中搜索它。 现在,我不想硬编码hibernate.cfg.xml的位置,或者只是将hibernate.cfg.xml复制到ide目录(这将起作用)。 我想要一个获得解决方案目录的解决方案,而当前目录是common7 \ ide。 可以让某人在设计器中查看我的表单,然后在任意机器上的任意目录中进行新的检查。 不,我不打算在代码中加载控件。 我在控件中有如此多的控件,如果没有它,将所有内容排成一行都是一场噩梦。 我尝试了一个预构建事件,它创建了一个包含解决方案目录的文件,但当然如何从common7 \ ide中找到它? 由于svn,所有项目文件都需要位于解决方案目录中。 谢谢你的帮助,我已经花了几个小时摆弄这个徒劳。 更新:我将hibernate.cfg设置为嵌入式资源。 对于每个配置,我只需创建一个新的构建配置,调试,发布,XYZ。 在大多数情况下,我建议嵌入您依赖的任何文件来运行程序。 它使构建安装程序变得更加简单。

无法在VS 2017 U1(15.3)中打开的项目中加载“Microsoft.Build.Framework.SdkReference”类型

在完成(显然是成功的)从VS 2017 15.1升级到15.3之后,我再也无法加载任何C#项目(无法打开现有,无法创建新项目)。 所有失败都有这个错误: 无法从程序集“Microsoft.Build.Framework,Version = 15.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a”加载类型“Microsoft.Build.Framework.SdkReference”。 我找到了一个引用此问题的人参考RC版本的15.3,但没有其他人,所以我不知道我的环境可能导致这个问题。 我已经尝试清除缓存和用户数据,修复,完全卸载/重新安装,以及删除第三方组件。 我没有想法。 我在这里提供的信息非常多,所以我不知道从哪里开始。 我很感激任何想法,或者至少看看其他人是否遇到了同样的问题。

向接口添加属性是否会阻止在派生类型中创建私有/受保护的“set”?

编辑: 事实certificate我错过了一些明显的东西,但是我会打开这个问题以防其他人犯同样明显的错误。 感谢那些指出来的人 见底部的解释。 是否可以在覆盖接口属性的属性上设置非公共集? 也许我有一个愚蠢的时刻,但在我看来,在界面中定义一个属性隐含地要求没有派生类可以为所述属性提供任何非公共集。 例: interface IField { bool IsValid { get; } } …并且由于界面属性可能没有辅助function修饰符意味着: class Field : IField { public override bool IsValid { get; protected set; } } ……尽管它在概念上符合接口要求,但是不可能实现。 IMO对于可能通过非公共属性进行的封装具有很大的负面影响,并且阻止了许多常见的使用模式。 我知道你可以创建一个非公共的SetIsValid成员来修改一个公共的后备存储,但这会产生一个不一致的模式,并添加原本不需要的代码噪声。 我错过了什么吗? 编辑:是的我错过了什么 我正在修改其他人的代码,只是意识到我正在挣扎的类实现了接口并从基类派生。 我是c#的新手,这就是导致覆盖混乱的原因。 实际的class级看起来像: class Field : IField, BaseField { public override bool IsValid { get; protected set; } […]

如何使用Observable实现轮询?

我有一个参数化的rest调用应该每隔五秒用不同的参数执行: Observable restCall = api.method1(param1); 我需要创建一个Observable ,它将使用param1的不同值每5秒轮询一次restCall。 如果api调用失败,我需要收到错误并在5秒内进行下一次调用。 应仅在restCall完成时(成功/错误)测量调用之间的间隔。 我目前正在使用RxJava,但.NET示例也会很好。

C#Regex只允许使用字母数字

我有以下正则表达式^[a-zA-Z0-9]+$允许使用字母数字字符。 这里的问题是,如果我只输入像“897687”这样的数字字符,那么正则表达式仍然匹配。 我不希望这种情况发生。 应该至少有一个文本字符,它应该以文本字符开头。 例如“a343”或“a98bder”或“a4544fgf343” 如果你可以帮助我提高我的正则表达式会很棒。