为Nullable <guid> </guid>分配值

时间:2014-02-13 22:58:44

标签: c# nullable

我正在尝试创建一个变量Guid?表示可以为空的db列。我在分配价值时遇到问题。我能够轻松地为变量赋值null。但是当我想分配一个Guid值时,我必须创建一个新的Guid?不接受字符串的对象。

Guid? sample=new Guid?(someString); // erroing "Cannot implicitly convert string to Guid"

所以我必须这样做

Guid? sample=new Guid?(new Guid(someString)); // working code

我也有条件地分配值。

Guid? sample=(string.IsNullOrWhiteSpace(someString))?null: new Guid?(new Guid(someString)); 

为什么Guid会出现这个问题?

3 个答案:

答案 0 :(得分:6)

  

但是当我想分配一个Guid值时,我必须创建一个新的Guid?不接受字符串的对象。

您可以将代码缩短为:

Guid? sample= new Guid(someString);

Nullable Types可以直接分配<T>类型。

int? i = 1; 
int? i2 = null;

bool? b = true;
bool? b2 = null;

答案 1 :(得分:3)

Guid? sample = new Guid?(new Guid(someString));

这没有多大意义。您有一个可以为null的类型,以便能够存储空值。但是,无论如何分配值 ,它都不会为空。类型的构造函数实际上永远不会返回null,因此new Guid(someString)将始终返回有效的Guid - 或者当然会抛出异常。因此,您可以将结果Guid分配给可空类型的变量:

Guid? sample = new Guid(someString);

如果您想考虑无效输入,例如如果someString为空或者不是有效Guid,则可以使用Guid.TryParse(.NET 4.0或更高版本):

Guid? sample = null;
Guid parsed;
if (Guid.TryParse(someString, out parsed))
    sample = parsed;

请注意,这样您就可以删除someString上的任何其他检查。您可以传入空字符串或其他任何内容,TryParse将返回false,保留sample的默认值。

答案 2 :(得分:2)

因为Guid有一个带string参数的构造函数。但是可以为空的Guid(Guid?)只接受Guid作为参数。