你能用字符串null初始化一个Guid吗?

时间:2017-03-03 09:28:29

标签: c# .net

这不是一个紧迫的问题,但我想知道是否有办法初始化像这样的Guid:

  string input = "example text...";
  Guid? outputGuid;                                       
  outputGuid = new Guid( ExampleMethodToGetString(input) ?? null );

虽然这不会出错,但它不会运行,这显然是因为重载不能以这种方式工作,只是想知道是否有比下面更短的内容。目前的工作解决方案是:

  string input = "example text...";
  Guid? outputGuid;
  input = ExampleMethodToGetString( input );
  outputGuid = input == null ? (Guid?) null : new Guid( input );

3 个答案:

答案 0 :(得分:2)

这是另一种方式

string input = "example text...";
Guid? outputGuid = null;
input = ExampleMethodToGetString( input );
if(input != null)
{
    outputGuid = new Guid( input );
}

答案 1 :(得分:1)

没有预先构建的解决方案。

扩展方法怎么样?

public static Guid? ToGuidOrNull(this string str)
{
    Guid guid = default(Guid);
    if (Guid.TryParse(str, out guid))
    {
        return (Guid?)guid;
    }
    else
    {
        return null;
    }
}

编辑感谢 @Matthew Watson 建议

public static Guid? ParseToNullableGuid(string str)
{
    if (string.IsNullOrEmpty(str)) return null;
    Guid guid = Guid.Parse(str); // Will throw if not a valid Guid
    return (Guid?)guid;
}

答案 2 :(得分:1)

为什么不从最后一行开出静态方法:

 public static Guid? GetGuidOrNull(string str)
 {
    return str == null ? (Guid?)null : new Guid(str);
 }

甚至:

 public static Guid? GetGuidOrNull(string str)
 {
    str = MethodToGetString(str);
    return str == null ? (Guid?)null : new Guid(str);
 }

然后你可以做(​​第一种情况):

 string input = "example text...";
 Guid? outputGuid = GetGuidOrNull(MethodToGetString(input));

或(第二种情况):

 string input = "example text...";
 Guid? outputGuid = GetGuidOrNull(input);