1

動的タイプの1つを暗黙的に変換しようとすると、問題が発生します。次のような定義を持つ2つのアセンブリがあります。

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'!='は、タイプ'System.Dynamic.DynamicObject'および'string'"}のオペランドには適用できません。

以前は、これら2つのクラスが同じアセンブリにある場合、このコードは正常に機能していました。誰かが私がここで間違っていることを教えてもらえますか?

ありがとう、
マックス

4

2 に答える 2

2

ConfigurationValue問題を解決しました。実際には少し恥ずかしいのですが、新しいアセンブリに移動したときに、コンテナー クラス(の型など) を internal から publicに変更するのを忘れていたConfiguration.Instanceため、もちろん型を解決できず、暗黙的な変換が行われました。見つかりませんでした

于 2011-03-10T18:15:46.757 に答える
0

試す

var SecurityLevel = new ConfigurationValue("Insecure");
于 2011-03-10T17:42:01.027 に答える