C# &引用;无法识别的Guid格式“;尝试使用合并在转换中分配null时
我有一个将数据表转换为列表的方法。我对除Guid之外的所有其他可空字段都没有问题。我的代码如下:C# &引用;无法识别的Guid格式“;尝试使用合并在转换中分配null时,c#,C#,我有一个将数据表转换为列表的方法。我对除Guid之外的所有其他可空字段都没有问题。我的代码如下: else if (pro.PropertyType == typeof(Guid?)) { pro.SetValue(obj, dr.IsNull(column.ColumnName) ? (Guid?)null : Guid.Parse(dr[column.ColumnName].ToString()), null); } 我不明白为什么它不接受(Guid?)null 非常感谢您的帮助。
else if (pro.PropertyType == typeof(Guid?))
{
pro.SetValue(obj, dr.IsNull(column.ColumnName) ? (Guid?)null : Guid.Parse(dr[column.ColumnName].ToString()), null);
}
我不明白为什么它不接受(Guid?)null
非常感谢您的帮助。“
不是有效的Guid格式。”
这是有效的:
var foo = "efe02d75-ee49-44c5-afd3-72a2414576d9";
Guid guid = Guid.Parse(foo);
但这不是:
var foo = "";
Guid guid = Guid.Parse(foo);
也不应该如此。根据需要,Guid.Parse()
的有效格式为:
- 00000000000000000000000000
- 00000000-0000-0000-0000-00000000
- {00000000-0000-0000-0000-000000000000}
- (00000000-0000-0000-0000-000000000000)
- {0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}
我想您最好使用
Guid.TryParse()
根据@itsme86的建议,我改为:
else if (pro.PropertyType == typeof(Guid?))
{
pro.SetValue(obj, string.IsNullOrEmpty(dr[column.ColumnName].ToString()) ? (Guid?)null : Guid.Parse(dr[column.ColumnName].ToString()), null);
}
dr[column.ColumnName].ToString()的值是多少?该消息暗示这不代表有效的guid。“无法识别的guid格式”更可能是由Guide.Parse()
引发的,而不是与null赋值有关。dr[column.ColumnName].ToString()是“”。“”在我看来非常无效。您是否对Guid.Parse()
失败感到惊讶?与其检查IsNull(),不如检查它是否为空字符串。或者除了它之外再做。@itsme86-谢谢你的建议。直到你提到这件事我才想起来。它现在正在工作。