隐式转换不适用于动态类型

时间:2011-03-10 17:40:45

标签: c#-4.0 implicit-conversion dynamic-typing

我在尝试隐式转换其中一个动态类型时遇到了问题。有两个程序集的定义类似于以下内容:

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 个答案:

答案 0 :(得分:2)

解决了这个问题,实际上有点尴尬,当我把它移动到新的程序集时,我忘了将ConfigurationValue的容器类(例如Configuration.Instance的类型)从内部更改为公共,所以当然无法解析类型并且未找到隐式转换

答案 1 :(得分:0)

尝试

var SecurityLevel = new ConfigurationValue("Insecure");