日期:2014-05-17  浏览次数:21106 次

一段非常诡异的代码,求助,在线等

 public Data.TbFmCharge GetChargeDetail(string ChargeCode)
    {
        Data.DataContext dc = new Data.DataContext(gzConnectionString);
        if (dc.TbFmCharges.Any(th => th.ChargeCode == ChargeCode))
        {
            return dc.TbFmCharges.FirstOrDefault(th => th.ChargeCode == ChargeCode);      
        }
        else
            return new Data.TbFmCharge();
    }



其中th.ChargeCode 是string 类型的
然后在红色的那一句上面报
无法将类型为“System.Decimal”的对象强制转换为类型“System.String”。 


我表示相当无奈,求助,求助~~在线等~~
------最佳解决方案--------------------
类型转换一下, Decimal无法隐式转换为string
------其他解决方案--------------------
你确认你的类型匹配吗
------其他解决方案--------------------
引用:
非常确定以及肯定,两个都是String类型的

别确定了、自己看看哪里不匹配吧
------其他解决方案--------------------
建议先确定,类型是否一致。
------其他解决方案--------------------
th.ChargeCode  如果你确定这个为string的话,你试试Equals吧
------其他解决方案--------------------
引用:
非常确定以及肯定,两个都是String类型的


呵呵,调试程序,就一句话“千万别说你这个非常确定以及肯定,你说的没用,要机器说了算!你就说破天去,机器说不是就不是,死机器不说谎”
------其他解决方案--------------------
th => th.ChargeCode 
你把鼠标hover到后面一个th上面,看一下th的数据类型,再看一下这个数据类型里面定义的ChangeCode属性,是什么类型的
我怀疑lz是在不同的class里面都定义了ChangeCode属性,一个是String的,一个是Decimal的
Search "ChangeCode" in entire solution就了然了
------其他解决方案--------------------
你就说破天去,机器说不是就不是,死机器不说谎
------其他解决方案--------------------
不是的,那个传进去的参数也是字符串的说
------其他解决方案--------------------
非常确定以及肯定,两个都是String类型的
------其他解决方案--------------------
奇了个怪的,为什么那个颜色变不了呢
------其他解决方案--------------------
[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_ChargeCode", DbType="NVarChar(50) NOT NULL", CanBeNull=false)]
[global::System.Runtime.Serialization.DataMemberAttribute(Order=4)]
public string ChargeCode
{
get
{
return this._ChargeCode;
}
set
{
if ((this._ChargeCode != value))
{
this.OnChargeCodeChanging(value);
this.SendPropertyChanging();
this._ChargeCode = value;
this.SendPropertyChanged("ChargeCode");
this.OnChargeCodeChanged();
}
}
}


字段是这样定义的




------其他解决方案--------------------
引用:
引用:
非常确定以及肯定,两个都是String类型的