繁体   English   中英

为什么会收到“指定的演员表无效”的信息?

[英]Why am I getting “Specified cast is not valid.”?

它指向的行Id = dataReader.GetGuid(0),

    while (dataReader.Read())
    {
        Partners.Add(new Partner {
            Id = dataReader.GetGuid(0),
            Name = dataReader.GetString(1),
            Email = dataReader.GetString(2),
            Finished = dataReader.GetInt32(3) == 1
        });
    }
}

我已经确认IddataReader.GetGuid(0)都属于Guid类型 ,如果您可以相信的话。

IdGuid类型,因为它是来自

public class Partner
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

并且dataReader.GetGuid(0)的类型为Guid因为当我这样做时

public class Partner
{
    //public Guid Id { get; set; }
    public string Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

Id = dataReader.GetString(0)

我得到错误

无法将类型为“ System.Guid”的对象转换为类型为“ System.String”的对象

没有意义!

编辑:当我隐式键入时,看起来确实正在获取我们的值:

在此处输入图片说明

dataReader.GetString(0)返回一个String ,并且不会将Guid隐式InvalidCastExceptionString ,从而导致InvalidCastException

尝试:

Id = dataReader.GetGuid(0).ToString()

另外,尝试使用String索引器而不是integer索引器来获取值:

Id = dataReader.GetGuid("Id"),
Name = dataReader.GetString("Name"),
Email = dataReader.GetString("Email"),
Finished = dataReader.GetInt32("Finished") == 1

否则,在结果中添加列将破坏您的代码。

更好的是,尝试使用EntityFramework为您完成所有映射。

这就是你的答案。 如果要对伙伴类中的ID使用Guid类型,请在从SQL Server读取数据时将服务器返回的字符串数据类型转换为Guid类型,如下所示

while (dataReader.Read())
{
    Partners.Add(new Partner {
    Id = Guid.Parse(dataReader.GetString(0)),
    Name = dataReader.GetString(1),
    Email = dataReader.GetString(2),
    Finished = dataReader.GetInt32(3) == 1 });
}

但是您的伴侣班级的ID类型为Guid,如下所示

public class Partner
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Email { get; set; }
    public bool Finished { get; set; }
}

当我尝试向Guid行动论证时遇到了这个问题。

Guid.Parse(context.ActionArguments["someArgument"])

这里的问题是ActionArguments是一个IDictionary,其中包含IDictionary<string, object>

当尝试将object投射到Guid ,出现错误。 解决方案是将其转换为字符串,然后进行转换。

Guid.Parse(context.ActionArguments["someArgument"].ToString());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM