我会在前面说我在动态数据上使用linq做了一些非常可怕的事情.但我无法弄清楚为什么这个查询无法编译:
错误1属性"<> h__TransparentIdentifier0"不能与类型参数一起使用
public class Program
{
public static void Main(string[] args)
{
var docs = new dynamic[0];
var q = from doc in docs
where doc["@metadata"]["Raven-Entity-Name"] == "Cases"
where doc.AssociatedEntities != null
from entity in doc.AssociatedEntities
where entity.Tags != null // COMPILER ERROR HERE
from tag in entity.Tags
where tag.ReferencedAggregate != null
select new {tag.ReferencedAggregate.Id, doc.__document_id};
}
}
public static class LinqOnDynamic
{
private static IEnumerable<dynamic> Select(this object self)
{
if (self == null)
yield break;
if (self is … 我有使用Microsoft.Diagnostics.Tracing.TraceEventNuGet包的代码,我编写了以下代码:
using (var session = new TraceEventSession("mine"))
{
session.StopOnDispose = true;
session.EnableProvider(ClrTraceEventParser.ProviderGuid, TraceEventLevel.Verbose,
(ulong)ulong.MaxValue,//,ClrTraceEventParser.Keywords.GCSampledObjectAllocationHigh,
new TraceEventProviderOptions
{
StacksEnabled = true,
});
using (TraceLogEventSource traceLogSource = TraceLog.CreateFromTraceEventSession(session))
{
traceLogSource.Clr.GCSampledObjectAllocation += data =>
{
Console.WriteLine(data);
};
traceLogSource.Process();
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我看起来像这样的输出:
<Event
MSec="10355.9688"
PID="7056"
PName=""
TID="11468"
EventName="GC/SampledObjectAllocation"
Address="0x000000C780036870"
TypeID="0x00007FFF1EC60BD8"
ObjectCountForTypeSample="1"
TotalSizeForTypeSample="28"
ClrInstanceID="9" />
Run Code Online (Sandbox Code Playgroud)
这很清楚,分配了一个对象,其大小为28个字节.但是,我不知道如何将TypeID映射到类型名称.
看起来这会做我想要的:
traceLogSource.Clr.TypeBulkType += data =>
{
for (int i = 0; i < data.Count; i++)
{
var e = data.Values(i);
Console.WriteLine("{0} -> {1}", e.TypeID, e.TypeName);
}
}; …Run Code Online (Sandbox Code Playgroud) 我有一种情况需要为使用SslStream作为服务器的客户端生成SSL证书.
我知道如何做到这一点(makecert.exe),但我在尝试确保连接的两端都经过身份验证时遇到了问题.
基本上,如果我使用自签名证书,我需要将其添加到受信任的根,以使相互身份验证工作.如果可以,我宁愿避免这样做.我知道我可以购买SSL证书,但我的情况是我需要为每个客户创建一个不同的证书,因此为每个客户购买证书是不可能的.
有没有办法避免这种情况?也许我可以购买一些证书,我可以使用它来生成更多证书?你可能会说,我对SSL一般都很无能为力.
有关详细信息,请参阅下面的代码,但基本方案如下.我有一个容器(会话),我可以放置对象和从中取出.
相近:
std::shared_ptr<Tiger> t = ...;
session.store("tigers/1", t);
std::shared_ptr<Tiger> t2 = session.load<Tiger>("tigers/1");
Run Code Online (Sandbox Code Playgroud)
两个函数定义为:
class Session {
template<class T>
void store(std::string id, std::shared_ptr<T> instance);
template<class T>
std::shared_ptr<T> load(std::string id);
}
Run Code Online (Sandbox Code Playgroud)
请注意,会话可以存储异构类型,但在时间store和地点load我静态地知道变量的类型是什么.
我的问题是我遇到了一个用户想要Tiger进入会话但是检查出基本类型的情况.例如:
session.load<Animal>("tigers/1");
Run Code Online (Sandbox Code Playgroud)
现在,我有效地将数据存储在void*会话内部并用于reinterpret_cast将它们恢复到用户提供的类型.只要一切都是微不足道的,这就行......但是当我们遇到稍微复杂的情况时,我们会遇到问题.
以下是演示我的问题的完整代码:
struct Animal
{
virtual void Pet() const = 0;
};
struct IJumpable
{
virtual void Jump() const = 0;
};
struct Tiger : Animal, IJumpable
{
void Pet() const override
{
std::cout << "Pet\n";
}
void …Run Code Online (Sandbox Code Playgroud)