【问题标题】:Implicit Conversion Not Working for Dynamic Type隐式转换不适用于动态类型
【发布时间】:2011-03-10 17:40:44
【问题描述】:

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

配置.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 语句逐字出现在我的代码中,并且总是失败并出现以下错误:

{“运算符'!='不能应用于'System.Dynamic.DynamicObject'和'string'类型的操作数”}

以前,当这两个类在同一个程序集中时,这段代码可以正常工作。谁能告诉我我在这里做错了什么?

谢谢,
最大

【问题讨论】:

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


    【解决方案1】:

    解决了这个问题,其实有点尴尬,我把ConfigurationValue的容器类(例如Configuration.Instance的类型)移到新程序集的时候忘记把容器类从内部改成公共了,所以当然是类型无法解析,也没有找到隐式转换

    【讨论】:

    • 即使您自己回答,也应将其标记为已回答。
    • 我本来打算去的,但它让我们等了三天,我忘了。谢谢你提醒我!
    • Grml 我在一个非公共课程中遇到了同样的问题和这个问题。很高兴我找到了这个!
    【解决方案2】:

    试试

    var SecurityLevel = new ConfigurationValue("Insecure");
    

    【讨论】:

    • 感谢您的及时回复。不幸的是,这在这种情况下不适用,尽管它可以解决第一篇文章代码中所述的问题。我简化了很多代码,所以让我澄清一下我到底想要做什么。我有另一个类Configuration 有一个动态类型的静态变量Instance(单例)。这个 Instance 字段包含配置值,所以我可以这样做:if (Configuration.Instance.SecurityLevel != "Insecure") 这是失败的 if 语句
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多