小编Zeb*_*ebi的帖子

为什么我的匿名类型在使用VB.Net但在C#中工作时不能在Clay中工作

在VB.Net中尝试粘土,但发现我无法完成所有工作.

这是克莱

这适用于C#

 dynamic c = new ClayFactory();
        var plant = c.Plant(new {LatinName = "test"});
        Console.WriteLine(plant.LatinName);
        Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

但这在VB.Net中不起作用

Dim c As Object = New ClayFactory
        Dim plant = c.Plant(New With {.LatinName = "test"})
        Console.WriteLine(plant.LatinName)
        Console.ReadLine()
Run Code Online (Sandbox Code Playgroud)

我在VB.Net中收到此错误消息:

> Cannot close over byref parameter
> '$arg1' referenced in lambda ''
Run Code Online (Sandbox Code Playgroud)

如果我能解决它,我不是100%肯定如何解决这个问题.我猜测匿名类型的VB.Net实现略有不同.

我在这一行得到错误:

Dim plant = c.Plant(New With {.LatinName = "test"})
Run Code Online (Sandbox Code Playgroud)

如果有人能向我解释,我将不胜感激.

IL似乎不同了.

对于VB,私有字段Latinname是这样的:

.field private initonly !T0 $LatinName
Run Code Online (Sandbox Code Playgroud)

对于C#,它是:

.field private initonly !'<LatinName>j__TPar' '<LatinName>i__Field'
.custom instance void …
Run Code Online (Sandbox Code Playgroud)

c# vb.net anonymous-types

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

需要在两个.NET进程之间快速通信

所以我有以下设置:

  • 一方面使用.NET dll的VB6应用程序
  • 另一端是.NET服务

VB6应用程序使用一个小型接口DLL与我们的新基础设施(服务等)进行通信,并且几乎不能在功能上进行更改.我们选择使用带有这样的绑定的WCF

<system.serviceModel>
    <client>
      <endpoint address="net.tcp://localhost:8001/HostCommunicator" binding="netTcpBinding" bindingConfiguration="NETTcpBinding" contract="IHostCommunicationContract"/>
    </client>

    <bindings>
      <netTcpBinding>
        <binding name="NETTcpBinding" maxBufferPoolSize="2147483647" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" receiveTimeout="00:10:00" sendTimeout="00:10:00">
          <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647"/>
          <reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
          <security mode="Transport">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </netTcpBinding>
    </bindings>
</system.serviceModel>
  <startup>
Run Code Online (Sandbox Code Playgroud)

沟通.

对于单个请求,这种方法可以正常工作,但VB6应用程序的一种模式是一种批处理模式,它为每个处理的文件发送单独的请求.每秒大约有1-4个请求.

这可以正常工作,直到完成许多请求.在我当前的机器和软件版本上,这是50个请求.如果我启动VB6应用程序,它会再次发出50个请求.在限制之后,应用程序将以99%的CPU使用率挂起.

我们正在使用双工渠道合同.

.net vb6 wcf

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

使用代码创建mustoveride函数

我有一个MustInherit类,里面有一些MustOveride方法.当我继承该类的形式时,我会自动获取MustOveride方法或属性.

我的问题是,我希望能够继承一个类,获取我的MustOveride函数和方法,但之后已经有了一些代码.我曾经见过一个.net类,当我从该类继承时,我得到了方法,并在其中添加了一些注释.

有人知道我的意思吗?(这有点难以描述;-))

.net c# vb.net inheritance

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

log4net - 为跟踪目的创建许多记录器是一个好习惯吗?

我想在我的消息传递应用程序中添加跟踪功能.我使用的每条消息都有一个唯一的标识符,该标识符被转发到后续消息(由原始消息产生的消息).

为了能够跨多个进程和可能的服务器监视消息的生命周期行为,我想使用log4net远程处理appender.

我可以使用一个记录器并在消息本身中编码消息ID:

  • Logger: "MessageLivetime" Message: "SomeId | message text")

但是我认为如果我为每条消息创建一个记录器会很聪明:

  • Logger: "MessageLivetime.SomeId" Message: "message text")

但是由于LogManager该类没有删除记录器的方法,我担心会遇到问题,因为会创建数千个废弃的记录器.

如果这种方法可行,那么对log4net更有洞察力的人能给我一个暗示吗?

我已经找到了上下文属性.他们是更好的选择吗?我如何写入事件上下文?

c# messaging log4net nservicebus

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

标签 统计

c# ×3

.net ×2

vb.net ×2

anonymous-types ×1

inheritance ×1

log4net ×1

messaging ×1

nservicebus ×1

vb6 ×1

wcf ×1