2011-03-10 37 views
1

我試圖隱式轉換我的一種動態類型時遇到問題。有兩個組件具有類似於以下定義:隱式轉換不適用於動態類型

Configuration.dll:

public class ConfigurationValue : DynamicObject 
{ 
    public ConfigurationValue(string val) 
    { 
     //... 
    } 

    //... 

    public static implicit operator string(ConfigurationValue val) 
    { 
     return val.ToString(); 
    } 
} 

有一個在此dll另一類稱爲Configuration與稱爲Instance成員變量(以使類單)。該變量將ConfigurationValue實例保存在字典中,並且是動態類型的。這讓我這樣做如下:

Server.dll:

//... 

if (Configuration.Instance.SecurityLevel != "Insecure") 
{ 
    //... 
} 

假設SECURITYLEVEL在字典中。 這個if語句在我的代碼逐字出現,總是失敗,出現以下錯誤:

{"Operator '!=' cannot be applied to operands of type 'System.Dynamic.DynamicObject' and 'string'"}

以前,當這兩個類在同一個組件,該代碼工作得很好。任何人都可以告訴我我在這裏做錯了什麼?

感謝,
最大

回答

2

問題解決了,有點尷尬其實,我忘了改變容器類ConfigurationValue(例如Configuration.Instance類型),從內部到公開當我將它移到新的程序集中時,當然這種類型無法解析,並且未發現隱式轉換

+0

您應該將它標記爲偶數儘管你自己回答了。 – jbtule 2011-03-14 14:43:12

+0

我打算這樣做,但這讓我們等了三天,我忘了。謝謝你提醒我! – 2011-05-24 16:13:33

+0

Grml我碰到了一個非公開類和這個問題。很高興我發現了這個! – namezero 2013-03-21 14:59:41

0

嘗試

var SecurityLevel = new ConfigurationValue("Insecure"); 
+0

感謝您的及時回覆。不幸的是,在這種情況下,這是不適用的,但它可以解決第一篇文章的代碼中所述的問題。我簡化了代碼,所以讓我澄清我正在嘗試做什麼。 我有另一個類'配置'與動態類型的靜態變量'Instance'(singleton)。這個'Instance'字段保存配置值,所以我可以這樣做: 'if(Configuration.Instance.SecurityLevel!=「Insecure」)' 這是如果語句失敗 – 2011-03-10 18:00:36