小编DeC*_*Caf的帖子

TypeDelegator等式不一致?

请考虑以下代码:

    class MyType : TypeDelegator
    {
       public MyType(Type parent)
          : base(parent)
       {
       }
    }

    class Program
    {
       static void Main(string[] args)
       {
          Type t1 = typeof(string);
          Type t2 = new MyType(typeof(string));

          Console.WriteLine(EqualityComparer<Type>.Default.Equals(t1, t2)); // <-- false
          Console.WriteLine(EqualityComparer<Type>.Default.Equals(t2, t1)); // <-- true

          Console.WriteLine(t1.Equals(t2)); // <-- true
          Console.WriteLine(t2.Equals(t1)); // <-- true

          Console.WriteLine(Object.Equals(t1, t2)); // <-- false
          Console.WriteLine(Object.Equals(t2, t1)); // <-- true
       }
   }
Run Code Online (Sandbox Code Playgroud)

为什么各种版本的Equals会返回不同的结果?EqualityComparer.Default可能调用Object.Equals,因此这些结果匹配,尽管它们本身不一致.Equals的正常实例版本都返回true.

当一个方法返回一个Type实际继承的方法时,这显然会产生问题TypeDelegator.想象一下,例如将这些类型作为键放在字典中,默认情况下使用EqualityComparer.Default进行比较.

有什么方法可以解决这个问题吗?我想在上面的代码中的所有方法返回true.

.net c# types equality equals

22
推荐指数
2
解决办法
919
查看次数

如何从SemanticModel为新创建的类获取声明的符号?

ISymbolClassDeclaration我刚刚创建的那个中获取一个最简单的方法是什么?

请考虑以下代码:

AdhocWorkspace workspace = new AdhocWorkspace();         
Project project = workspace.AddProject("Test", LanguageNames.CSharp);

ClassDeclarationSyntax classDeclaration = SyntaxFactory.ClassDeclaration("MyClass");
CompilationUnitSyntax compilationUnit = SyntaxFactory.CompilationUnit().AddMembers(classDeclaration);         
Document document = project.AddDocument("Test.cs", compilationUnit);
SemanticModel semanticModel = await document.GetSemanticModelAsync();
ISymbol symbol = semanticModel.GetDeclaredSymbol(classDeclaration); // <-- Throws Exception
Run Code Online (Sandbox Code Playgroud)

最后一行抛出一个异常,说" 语法节点不在语法树中 ".

我想我需要ClassDeclarationSyntax从新的那里再次获得我刚创建的那个SyntaxTree.但是,在新的SyntaxTree给定中,只有旧的才能找到它的最简单的方法是什么ClassDeclarationSyntax

在上面的例子中,类是唯一的类,SyntaxTree并且是第一个子类CompilationUnit,因此在这个简单的情况下很容易找到它.但是想象一下语法树包含很多声明的情况,这些声明可能是嵌套的,并且所寻求的类声明嵌套在内部?有没有办法用旧的ClassDeclarationSyntax方法找到新的?(或者我在这里做错了什么?)

c# roslyn .net-4.6

8
推荐指数
1
解决办法
559
查看次数

将注册表项导出到C#中的.REG文件

我目前正在使用Microsoft.Win32.Registry函数来创建,删除,设置/获取值等.有没有办法将包含应用程序设置的某个键"导出"到.REG文件?

.net c# registry winapi

7
推荐指数
1
解决办法
6450
查看次数

依赖关系在大型应用程序中实现EventSource以进行语义记录

我正在开发一个包含三个Windows服务和几个普通Windows应用程序(.exe)的大型产品.现在我们要转向ETW和语义记录,并使用Microsoft.Diagnostics.Tracing.EventSource.

我在某处读到应用程序的所有逻辑连接部分都应使用相同的事件源.这意味着我们希望为我们的服务提供几乎一个EventSource.但是,如果不在产品中的几乎所有组件中引入依赖关系,我们怎么做呢?

该应用程序目前包含约70个程序集.并且为了能够在EventSource中创建一个log-method(例如接受枚举值),包含事件源的程序集必须引用定义枚举的程序集,这意味着需要将枚举定义从使用它的程序集,或者.exe可能是所有程序集引用的东西.

有没有办法在一个仍然使用相同ETW EventSource的应用程序中从EventSource派生几个类?或者,如果不希望引入一大堆新的依赖项来创建日志类,那么在这样的场景中使用ETW实现语义日志记录的好方法是什么?

.net etw etw-eventsource

7
推荐指数
1
解决办法
451
查看次数

通过密钥和索引进行有效操作和检索的数据结构

我正在寻找具有例如功能的数据结构.在OrderedDictionary.NET中,也就是关联集合(即一个相关联的密钥)维护元素的顺序(就像一个正常的List一样).

它必须通过索引和键快速查找.它还应该有一个快速"追加"操作(在最后插入一个新项目),以及快速删除任何索引(基于索引或键)的项目.

OrderedDictionary.NET中同时使用哈希表和一个数组来存储它的项目,如果我没有记错.因此,基于键重新获取索引(反之亦然)是O(n),当然从数组中间删除项目的是O(n)开头,加上从中添加的索引查找如果按键删除键.

我的问题是,是否存在满足我条件的更有效的数据结构,或者这确实是我最好的选择?

.net dictionary lookup-tables data-structures

6
推荐指数
1
解决办法
681
查看次数

使用control.BackgroundImage = Image.FromStream(memStream)时出现内存异常;

我编写了一个代码,用于从文件中读取png图像并显示控件.
我想从流和设置读取图像

control.BackgroundImage = Image.FromStream(memStream);
Run Code Online (Sandbox Code Playgroud)

但是当使用这段代码时,会发生"内存不足"异常.但是在使用时

control.Image = Image.FromStream(memStream);
Run Code Online (Sandbox Code Playgroud)

要么

control.BackgroundImage = Image.FromFile(fileSource);
Run Code Online (Sandbox Code Playgroud)

那就是工作.

图像文件大小为5KB.

 if (System.IO.File.Exists(imgSource))
 {
  using (FileStream localFileStream = new FileStream(imgSource, FileMode.Open))
  {
  using (MemoryStream memStream = new MemoryStream())
  {
   int bytesRead;
   byte[] buffer = new byte[1024];

   while ((bytesRead = localFileStream.Read(buffer, 0, buffer.Length)) > 0)
   {
      memStream.Write(buffer, 0, bytesRead);
   }
   retIMG = Image.FromStream(memStream);

   pictureBox1.Image = retIMG;      // is work
   label1.Image = retIMG;       // is work
   button1.Image = retIMG;      // is work
   button1.BackgroundImage = retIMG;    // …
Run Code Online (Sandbox Code Playgroud)

c# image exception winforms

6
推荐指数
2
解决办法
2900
查看次数

Wix中特征选择树中的特征依赖性

如果在功能选择树中选择了其他功能,是否有任何方法可以强制安装特定功能?那是没有特征是他们的依赖的孩子?

wix wix3.9

6
推荐指数
1
解决办法
700
查看次数

为什么跨AppDomain调用后Transaction.Current变成null?

考虑以下小程序,它只是创建一个TransactionScope、打印Transaction.Current、调用另一个 AppDomain 中的方法(需要一段时间执行),然后Transaction.Current在返回时打印。

using System;

using System.Linq;
using System.Runtime.Remoting.Lifetime;
using System.Threading;
using System.Transactions;

namespace TransactionScopeFlowTest
{
   class Program
   {
      static void Main(string[] args)
      {
         // These times are just to generate the error faster. Normally the initial lease is 5 minutes, meaning the method call
         // would have to take 5 minutes to occur, so we speed it up here for demonstration purposes.
         LifetimeServices.LeaseManagerPollTime = TimeSpan.FromSeconds(1);
         LifetimeServices.LeaseTime = TimeSpan.FromSeconds(1);
         LifetimeServices.RenewOnCallTime = TimeSpan.FromSeconds(1);

         AppDomain domain …
Run Code Online (Sandbox Code Playgroud)

.net remoting appdomain transactionscope system.transactions

5
推荐指数
0
解决办法
708
查看次数

LINQ:转换集合中的项目

是否有LINQ方法来修改集合中的项目,例如简单地设置集合中每个项目的属性?像这样的东西:

var items = new []{ new Item { IsActive = true } }
var items = items.Transform(i => i.IsActive = false)
Run Code Online (Sandbox Code Playgroud)

其中Touch枚举每个项目并应用转换.顺便说一句,我知道SELECT扩展方法,但这需要我在进行此转换的类型上公开一个方法并返回相同的引用.

var items = items.Select(i => i.Transform())
Run Code Online (Sandbox Code Playgroud)

其中Item.Transform返回转换并返回相同的实例.

TIA

.net c# linq

4
推荐指数
2
解决办法
4756
查看次数

如何使用CancellationToken支持将IObservable <T>转换为RX中的列表

我有一个方法返回IObservable<long>我从async方法调用的方法.我想将此转换为正常List<long>,但如果我CancellationToken发出信号,则取消该操作.

我想做这样的事情:

List<long> result = await Foo().ToList(myCancellationToken);
Run Code Online (Sandbox Code Playgroud)

完成此任务的正确(和最简单)方法是什么?返回an 的ToList()扩展方法并不带参数.IObservable<T>IObservable<List<T>>CancellationToken

.net system.reactive .net-4.5 cancellation-token

3
推荐指数
1
解决办法
1689
查看次数

列匹配值时的高效ROW_NUMBER增量

我试图找到一种有效的方式来获得列Expected仅低于IdState.我想要的是Expected每次增加的数量State0(按顺序排列Id).

+----+-------+----------+
| Id | State | Expected |
+----+-------+----------+
|  1 |     0 |        1 |
|  2 |     1 |        1 |
|  3 |     0 |        2 |
|  4 |     1 |        2 |
|  5 |     4 |        2 |
|  6 |     2 |        2 |
|  7 |     3 |        2 |
|  8 |     0 |        3 | …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server-2012

1
推荐指数
1
解决办法
45
查看次数