C# &引用;无法识别的Guid格式“;尝试使用合并在转换中分配null时

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 非常感谢您的帮助。

我有一个将数据表转换为列表的方法。我对除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

非常感谢您的帮助。

不是有效的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-谢谢你的建议。直到你提到这件事我才想起来。它现在正在工作。