![](/img/trans.png)
[英]Why am I getting an “InvalidCastException: Specified cast is not valid.” when trying to cast a Type to interface
[英]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
});
}
}
我已经确认Id
和dataReader.GetGuid(0)
都属于Guid
类型 ,如果您可以相信的话。
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; }
}
并且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
隐式InvalidCastException
为String
,从而导致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.