C# Razor引擎动态模板模型成员

C# Razor引擎动态模板模型成员,c#,razorengine,C#,Razorengine,以下代码生成“WTF??” Model.Type似乎是RazordDynamicObject类型。我如何安全地将其重新转换为类型 谢谢 我想你的意思是: var t = @"@((typeof(Model.Type) as Type == null)?""WTF??"":""Makes Sense"")"; var s = Engine.Razor.RunCompile(t, Guid.NewGuid().ToString(), null, new { Type = typeo

以下代码生成“WTF??”

Model.Type似乎是RazordDynamicObject类型。我如何安全地将其重新转换为类型

谢谢

我想你的意思是:

var t = @"@((typeof(Model.Type) as Type == null)?""WTF??"":""Makes Sense"")";
var s = Engine.Razor.RunCompile(t, Guid.NewGuid().ToString(), null, 
        new { Type = typeof(DateTime)});

Console.WriteLine(s);

Type
属性只返回模型的当前类型,而不是
Type
对象。

您不需要。这是一个奇怪的副作用,因为您从一个匿名类开始,它是内部的,需要包装

RazordDynamicObject会再次包装所有调用,以便能够处理匿名类型的属性。RazordDynamicObject的设计方式甚至可以跨Appdomains工作(隔离)

如果你需要一个具体的实例,你需要使用一个具体的类。也许应该有一个选项来禁用递归包装。如果您觉得需要该功能,请在github RazorEngine页面上打开一个问题

编辑:从3.6.2开始不再如此。实际上,您现在可以通过转换到具体类型来摆脱这个RazordDynamicObject包装器。在一些隐藏的场景中,我们会自动转义包装器(但我不会在这里详细介绍)。请注意,现在应该“正常工作”

Matthid,RazorEngine的贡献者

var t = @"@((typeof(Model.Type) as Type == null)?""WTF??"":""Makes Sense"")";
var s = Engine.Razor.RunCompile(t, Guid.NewGuid().ToString(), null, 
        new { Type = typeof(DateTime)});

Console.WriteLine(s);