Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Razor引擎在C#到VB.NET转换的动态/对象解析中失败_C#_Asp.net_.net_Vb.net_Razor - Fatal编程技术网

Razor引擎在C#到VB.NET转换的动态/对象解析中失败

Razor引擎在C#到VB.NET转换的动态/对象解析中失败,c#,asp.net,.net,vb.net,razor,C#,Asp.net,.net,Vb.net,Razor,我正在尝试使用RazorEngine转换emailer类的C#实现,以解析razor模板,然后将电子邮件发送到VB.NET。这在C#中非常有效,但在将C#动态类型转换为VB.NET“object”类型时,我遇到了一些问题(从我所能看出,这是最接近的等效类型) 例如,这段代码在C#中工作得非常好: 在我转换到VB.NET的过程中,我最终得到了一个如下所示的函数调用: Private Shared Function RenderEmailBody(strTemplate As String, mod

我正在尝试使用RazorEngine转换emailer类的C#实现,以解析razor模板,然后将电子邮件发送到VB.NET。这在C#中非常有效,但在将C#动态类型转换为VB.NET“object”类型时,我遇到了一些问题(从我所能看出,这是最接近的等效类型)

例如,这段代码在C#中工作得非常好:

在我转换到VB.NET的过程中,我最终得到了一个如下所示的函数调用:

Private Shared Function RenderEmailBody(strTemplate As String, model As Object) As String

  Dim template As String = File.ReadAllText(strTemplate)
  Dim body As String = Razor.Parse(template, model)

  Return body

End Function
RenderEmailBody("mytemplate.vbhtml", New With { .Var1 = "1", .Var2 = "2" })
我对它的呼吁是这样的:

Private Shared Function RenderEmailBody(strTemplate As String, model As Object) As String

  Dim template As String = File.ReadAllText(strTemplate)
  Dim body As String = Razor.Parse(template, model)

  Return body

End Function
RenderEmailBody("mytemplate.vbhtml", New With { .Var1 = "1", .Var2 = "2" })
但是,当我运行此操作时,会引发以下异常:

TemplateCompilationException was unhandled by user code
Unable to compile template. 'object' does not contain a definition for 'Var1' and no extension method 'Var1' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
当我在断点上检查
model
时,它似乎正确地分配了Var1和Var2,但是当我调用
Razor.Parse时,我不断地发现它不能正确解释我的动态对象


我在这里做错什么了吗?或者这两种类型之间存在固有的不兼容性?

对象
动态
是两种完全不同的东西。在VB的情况下,您所做的是完全取消模型的装箱。他们在C#中的dynamic关键字保留了实际的类型,而没有在设计时实际知道它。但是,当您以这种方式使用
Object
时,将删除对该类型的所有实际引用。在本例中,您需要将模型重铸为其特定类型,才能访问
.Var1
。最好的选择是调整方法调用的签名,使其具有您正在寻找的特定类型,或者使用通用模型可以实现的接口来定义
.Var1
.Var2
属性