C#“共享指针”用于替代内存管理?

我正在寻找一种在C#中执行此操作的方法: Asker对象将向Giver对象询问Resource对象。 当被问及时,Giver将在其字典中搜索现有的匹配资源。 如果找到,它将返回Resource的引用; 否则,它将从数据库数据创建一个新的资源,在Dictionary中保存该引用,最后返回引用。 Asker可能会多次请求相同的资源,在这种情况下,Giver将从字典中返回相同的资源相同的次数。 Asker可能在任何时候都没有使用给定的资源,在这种情况下,它对资源没有任何进一步的作用。 问题:Giver如何检测任何不再使用的资源并将其从字典中删除? 优选地,Giver应该在没有Asker帮助的情况下执行此操作。 这可能吗? 我似乎无法解决这个问题。 编辑:谢谢大家的好评。 尤其是WeakReferences。 我不知道他们在那里。 但我有两个主要目标,我可以指明更清楚。 给予者不应该依赖Asker来获得通知。 在使用给定资源时, 所有引用必须指向相同的资源,以便对资源的修改反映在使用相同资源的所有位置。 编辑:[删除了错误的代码块]

SHA256哈希计算

对于我的雇主,我必须为他们下载的某些文件提供带有校验和的网络应用程序的客户。 我想向用户提供他们的客户端工具也可能生成的哈希值,因此我一直在比较在线哈希工具。 我的问题是关于它们的散列forms,因为它们不同,奇怪的是。 经过快速搜索,我测试了5: http://www.convertstring.com/Hash/SHA256 http://www.freeformatter.com/sha256-generator.html#ad-output http://online-encoder.com/sha256-encoder-decoder.html http://www.xorbin.com/tools/sha256-hash-calculator http://www.everpassword.com/sha-256-generator 输入值’test’(之后没有’enter’)所有5给我相同的SHA256结果。 然而,这里开始了一件奇特的事情,当我输入值’test [enter] test’(所以两行)时,在线工具1,2和3给我相同的SHA256哈希值,而站点4和5给我一个不同的哈希值(所以1,2和3相等,4和5相等)。 这很可能与工具或底层代码处理\ r \ n的方式有关,或者至少我认为如此。 巧合的是,站点1,2和3为我提供了与我的C#代码相同的哈希: var sha256Now = ComputeHash(Encoding.UTF8.GetBytes(“test\r\ntest”), new SHA256CryptoServiceProvider()); private static string ComputeHash(byte[] inputBytes, HashAlgorithm algorithm) { var hashedBytes = algorithm.ComputeHash(inputBytes); return BitConverter.ToString(hashedBytes); } 问题是:哪些网站“正确”? 有没有办法知道散列是否符合标准? UPDATE1:将编码更改为UTF8。 这对创建的输出哈希没有影响。 谢谢@Hans。 (因为我的Encoding.Default可能是Encoding.UTF8) 更新2:也许我应该稍微扩展一下这个问题,因为它可能没有得到解释,对不起。 我想我要问的更多的是可用性问题,而不是技术问题; 我应该提供具有不同行结尾的所有哈希吗? 或者我应该坚持一个? 客户端可能会打电话给我的公司,如果他们有不同的计算哈希方式,他们会以某种方式改变他们的文件。 这通常如何解决?

MemoryStream来自bytes数组,具有不同类型的数据

我想创建一个包含int32,int16,单值的内存流。 使用二进制文件是没用的,所以我试图创建字节数组。 因为值是不同的类型,我不知道如何正确地做到这一点。 所以我尝试这样做: byte[] tab = new byte[]{2,0,0,0,3,0,3,0} – 2是int32(四个字节),另外两个3是int16(两个字节) 这工作正常,但是当我想添加一些单个值时,它会产生错误。 我不能这样做: byte[] tab = new byte[]{2,0,0,0,3,0,3,0,4.4f,5.6f} 我必须有正确格式的流,因为这个流将在这个方法中读取: short[] rawData; float[] modulusData; public void rawData(Stream s) { BinaryReader br = new BinaryReader(s); int dataCount = br.ReadInt32(); if (dataCount > 0) { rawData = new short[dataCount]; for (int i = 0; i 0) { modulusData […]

Swashbuckle Swagger UI:如何从xml注释中删除参数中所需的内容

我想更改控制器中某些参数的必需属性。 我使用XML注释来链接到Swagger。 这里的示例图像

如何使用C#应用程序重置Arduino Mega2560?

我注意到Arduino IDE会在启动/退出时由内置的串行应用程序自动重置 其中一条FT232RL硬件流控制线(DTR)通过100纳法电容连接到ATmega1280的复位线。 当该线被置位(取低)时,复位线下降足够长的时间以复位芯片。 我注意到我的串行C#应用程序不会发生这种行为。 我希望重置function适用于我的C#应用​​程序。 我没有做什么让我的C#应用​​程序重置我的Arduino Mega? Arduino和C#的工作代码: 通过将PWM Port12的电线连接到RESET端口,我在大约5分钟内完成了工作。 在Arduino上,我检查了传入的SerialEvent3上的文本RESET。 找到RESET时: pinMode(7, OUTPUT); digitalWrite(7, LOW); 至于C#,它很简单: if (serialPort1.IsOpen) { serialPort1.Write(“RESET”); } 重置似乎按预期工作。

如何在WPF中设置按钮的背景颜色?

如何在xaml中设置按钮的背景颜色? 它不会比这更难 但这不起作用……为了避免混淆,这里的按钮是System.Windows.Controls.Button 编辑 我忘了提到我使用DevExpress的ThemeManager但不认为这会导致问题,因为DevExpress他们没有设计标准的Windows按钮…但显然他们这样做,这基本上使得无法改变按钮的背景颜色没有一些重要的工作……

帮助修复BBcode正则表达式

我有一个抓住bbcode标签的正则表达式。 除了小故障外,它的效果很好。 这是当前的表达式: \[([^=\[\]]+)[=\x22′]*([^ \[\]]*)[‘\x22]*\](.+)\[/\1\] 以下是它成功匹配的一些文本及其构建的组: [url = http://www.google.com]转到谷歌![/ url] 1:url 2: http : //www.google.com 3:去谷歌! [IMG] http://sofzh.miximages.com/c%23/f [/ IMG] 1:img 2:NULL 3: http : //www.somesite.com/someimage.jpg [quote] [quote]第一次嵌套引用[/ quote] [quote]第二次嵌套引用[/ quote] [/ quote] 1:引用 2:NULL 3:[quote]第一次嵌套引用[/ quote] [quote]第二次嵌套引用[/ quote] 所有这一切都很棒。 我可以通过对同一个正则表达式运行第三个匹配组来处理嵌套标记,并递归处理嵌套的所有标记。 问题在于使用[quote]标签的示例。 请注意,第三个匹配组是一组两个引用标记,因此我们期望两个匹配。 但是,我们得到一个匹配,如下所示: [quote]第一次嵌套引用[/ quote] [quote]第二次嵌套引用[/ quote] 1:引用 2:NULL 3:第一次嵌套引用[/ quote] [quote]第二次嵌套引用 哈啊! 这根本不是我们想要的。 […]

试图通过使用Singleton来确定此代码是否会带来任何好处

我正在开发一个项目,其中一个联合开发人员(以及之前的开发人员)使用Singleton / Facade几乎每个页面的内部都有很多方法调用,但实际上并没有维护数据。 例如: public class FooFacade { private static FooFacade m_facade = null; private static DataAccessManager m_dataAccessMgr = null; public StringBuilder Status {get; set; } private FooFacade() { this.Status = new StringBuilder(); } public static FooFacade getInstance() { if (m_facade == null) { m_dataAccessMgr = DataAccessManager.getInstance(); m_facade = new FooFacade(); } return m_facade; } […]

我可以将DynamicParameters与Template一起使用并在dapper中使用返回参数吗?

我目前正在处理的系统使用存储过程进行所有数据访问。 我现在正在研究Dapper(到目前为止它看起来很棒)但是我想知道我是否可以使用使用模板创建的DynamicParameters对象,但是将其中一个参数作为输出参数。 例如: SP: CREATE PROCEDURE InsertPerson @ID int Output, @Name varchar(100), @DOB DateTime2 AS –INSERT STATEMENT SET @ID = SCOPE_IDENTITY() POCO: internal class Person { public int ID { get; set; } public string Name { get; set; } public DateTime DOB { get; set; } } 码: var procParams = new DynamicParameters(person); connection.Execute(“InsertPerson”, […]

如何在textBlock上设置on click效果并打开一个新的WPF窗口?

嗨,我是WPF的新手,我正在努力学习它。 所以现在我想知道如何在ListBox中的文本块上创建onclick效果。 我想点击listBox中的任何项目并打开一个新窗口。 我一定做错了什么,但我不知道它是什么。 到目前为止,我有以下内容。 上面的代码在我的XAML文件中。 如果是这样,我还需要其他东西。 应该在哪里?