[英]RuntimeBinderException when accessing dynamic anonymous type in view
[英]Accessing properties of anonymous/dynamic types across dll boundaries gives RuntimeBinderException
在下面的示例中, x.propertyX工作正常,而y.propertyX給了我一個Microsoft.CSharp.RuntimeBinder.RuntimeBinderException ,抱怨“object”中沒有定義“propertyX”。
Program 類中的 CreateDynamic 方法(如下所示)和 Class1 中的 CreateDynamic 方法(未顯示)完全相同,但 Class1 與 Program 在不同的項目中。 如果我將 Class1 移到 Program 的項目中,則一切正常。
class Program
{
public static object CreateDynamic()
{
return new { propertyX = "asdf" };
}
static void Main(string[] args)
{
dynamic x = CreateDynamic();
Console.WriteLine(x.propertyX);
dynamic y = Class1.CreateDynamic();
Console.WriteLine(y.propertyX);
我需要做什么才能使匿名類型作為動態類型跨 dll 工作 - 或者這是不可能的?
更新: Fwiw,我發現我可以使用 ExpandoObjects 解決這個問題,然后我將其“轉換”為動態,但與
new { key1 = val1, key2 = val2 }
匿名類型提供的樣式。
匿名類型是創建它們的程序集內部的。如果您可以控制源代碼,您可以將它們設為Friend 程序集
[assembly:InternalsVisibleTo("TheOtherAssembly")]
但也有缺點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.