程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C# 4.0跨程序集使用"dynamic"

C# 4.0跨程序集使用"dynamic"

編輯:C#入門知識

今天寫代碼時偷懶用了dynamic,結果遇到問題,運行時始終無法獲取dynamic對象的屬性。原問題簡化後如下:

程序集A包含SampleClass類,有一個靜態方法,接收一個dynamic類型參數並將其Value屬性輸出。

public class SampleClass
{
    public static void Output (dynamic result)
    {
        Console.WriteLine (result.Value);
    }
}

程序集B引用程序集A並調用Output方法:

SampleClass.Output (new { Value = something.CurrentValue });

運行結果是:

"Unhandled Exception: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: object does not contain a definition for Value"

而且在調試時,是可以看到result的Value屬性值的:

image

用反射也可以看到確實有Value這個屬性,但這裡就是無法輸出,原因是什麼?

 

 

------------------------------------------

答:因為匿名類型默認是private的,所以在B程序集中定義的匿名類型,A程序集是無法直接獲取其成員信息的,因而無法輸出。解決方法是預先定義public的數據類型。所以匿名類型的使用還是有很多限制的,類似的問題也出現在匿名方法上。

    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved