请考虑以下代码:
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.
ISymbol从ClassDeclaration我刚刚创建的那个中获取一个最简单的方法是什么?
请考虑以下代码:
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方法找到新的?(或者我在这里做错了什么?)
我目前正在使用Microsoft.Win32.Registry函数来创建,删除,设置/获取值等.有没有办法将包含应用程序设置的某个键"导出"到.REG文件?
我正在开发一个包含三个Windows服务和几个普通Windows应用程序(.exe)的大型产品.现在我们要转向ETW和语义记录,并使用Microsoft.Diagnostics.Tracing.EventSource.
我在某处读到应用程序的所有逻辑连接部分都应使用相同的事件源.这意味着我们希望为我们的服务提供几乎一个EventSource.但是,如果不在产品中的几乎所有组件中引入依赖关系,我们怎么做呢?
该应用程序目前包含约70个程序集.并且为了能够在EventSource中创建一个log-method(例如接受枚举值),包含事件源的程序集必须引用定义枚举的程序集,这意味着需要将枚举定义从使用它的程序集,或者.exe可能是所有程序集引用的东西.
有没有办法在一个仍然使用相同ETW EventSource的应用程序中从EventSource派生几个类?或者,如果不希望引入一大堆新的依赖项来创建日志类,那么在这样的场景中使用ETW实现语义日志记录的好方法是什么?
我正在寻找具有例如功能的数据结构.在OrderedDictionary.NET中,也就是关联集合(即一个相关联的密钥与值)维护元素的顺序(就像一个正常的List一样).
它必须通过索引和键快速查找.它还应该有一个快速"追加"操作(在最后插入一个新项目),以及快速删除任何索引(基于索引或键)的项目.
在OrderedDictionary.NET中同时使用哈希表和一个数组来存储它的项目,如果我没有记错.因此,基于键重新获取索引(反之亦然)是O(n),当然从数组中间删除项目的是O(n)开头,加上从中添加的索引查找如果按键删除键.
我的问题是,是否存在满足我条件的更有效的数据结构,或者这确实是我最好的选择?
我编写了一个代码,用于从文件中读取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) 考虑以下小程序,它只是创建一个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
是否有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
我有一个方法返回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
我试图找到一种有效的方式来获得列Expected仅低于Id和State.我想要的是Expected每次增加的数量State是0(按顺序排列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)