小编Aye*_*ien的帖子

动态+ linq编译错误

我会在前面说我在动态数据上使用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 …

c# linq dynamic

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

从GCSampledObjectAllocationHigh翻译TypeId

我有使用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)

profiling etw

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

SslStream的SSL证书设置

我有一种情况需要为使用SslStream作为服务器的客户端生成SSL证书.

我知道如何做到这一点(makecert.exe),但我在尝试确保连接的两端都经过身份验证时遇到了问题.

基本上,如果我使用自签名证书,我需要将其添加到受信任的根,以使相互身份验证工作.如果可以,我宁愿避免这样做.我知道我可以购买SSL证书,但我的情况是我需要为每个客户创建一个不同的证书,因此为每个客户购买证书是不可能的.

有没有办法避免这种情况?也许我可以购买一些证书,我可以使用它来生成更多证书?你可能会说,我对SSL一般都很无能为力.

.net ssl sslstream

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

来自空隙的多晶铸造*

有关详细信息,请参阅下面的代码,但基本方案如下.我有一个容器(会话),我可以放置对象和从中取出.

相近:

 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)

c++

3
推荐指数
2
解决办法
337
查看次数

标签 统计

.net ×1

c# ×1

c++ ×1

dynamic ×1

etw ×1

linq ×1

profiling ×1

ssl ×1

sslstream ×1