无法将 'System.Guid?' 转换为 'System.Guid'

27

有人知道如何处理这个错误吗?

cannot convert from 'System.Guid?' to 'System.Guid'
5个回答

57

参见MSDN

在这种情况下,如果您确定可空变量具有值,则仅使用myNullableVariable.Value,否则使用(myNullableVariable.HasValue)?myNullableVariable.Value:somedefaulthere

如果您不关心默认值是否为特定值,则可以使用GetValueOrDefault(),当可空类型真正为空时。

最后一种方法是:myNullableVariable.Value ?? defaultvalue

实际上,MyType?变量在内部是一个Nullable<MyType>。它们之间没有隐式或显式转换,因此需要手动从Nullable中提取值。我列出的第三种方式最简洁(也是最好的?)方式,因此在大多数情况下可能是最好的选择。


6
使用Guid?.Value属性将'System.Guid?'转换为'System.Guid',如下示例:
Obj GetValue(Guid yourID)
{
return FetchObject(yourID)
}
Void main()
{
Guid? passvalue;
Obj test = GetValue(passvalue.Value);
}

2

只需在if语句中使用Nullable<T>.HasValue来检查null值,然后在其后使用Nullable<T>.Value来获取基础类型的值。

int? a = null;
if(a.HasValue){
  Console.WriteLine($"a has value {a.Value}");
} else {
  Console.WriteLine("No value found in a");
}

1
首先初始化guid变量。
Guid yourGuid= Guid.NewGuid()

然后在你想要的地方设置值,例如:
 Guid defaultId = Guid.NewGuid();
 if (customerRow.GuardianState.Length > 2) {
 Guid StateId = record.StateId ?? defaultId;}

1
无法将类型'System.Guid?'转换为'System.Guid'
您正在尝试将类型System.Guid?保存到类型System.Guid中。在您的模型中,您可以通过删除问号将System.Guid?编辑为System.Guid。
或者,参考上面的RCIX答案。

3
这个答案是7年前被采纳的,那现在有什么新的价值吗? - Maciej Jureczko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接