C#如何处理GUID返回类型异常?

时间:2010-12-17 18:26:00

标签: c#

我有一个带有以下签名的方法:

public Guid FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid 
}

我的问题是,如果在函数中找不到任何项目,那么将不会返回GUID - 这不言而喻!但有没有办法返回一些平淡的GUID?

更好的是,我可以采用更通用的方法,不仅仅是针对GUID,而且通常在我返回强类型时?我真的不想将对象用作返回类型,必须有更好的方法。

提前致谢。

6 个答案:

答案 0 :(得分:6)

要回答你的第一个问题,你可以使用Guid.Empty,它会返回一个保证全为零的guid。

至于你的第二个问题,一种方法是返回一个bool并使用out参数作为参数,bool指示你是否有值。不是每个人都喜欢使用out参数。

public bool FindTermIDFromCustomProperty(out Guid termId) 

答案 1 :(得分:6)

你可以返回一个可以为空的Guid,所以如果没有找到任何项目,你将返回null

public System.Nullable<Guid> FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid

     if (!found)
     {
         return null;
     }
}

Nullable types为结构工作。

引用类型已经可以设置为null。

答案 2 :(得分:5)

如果您使用的是.NET 2.0或更高版本,则可以返回可以为空的类型。

public Guid? FindTermIDFromCustomProperty() 
{
    // Logic here to find an item and return the guid 
    else
        return null;
}

var guid = FindTermIDFromCustomProperty();
if (guid.HasValue) // or "if (guid != null)"
    DoSomethingWith(guid.Value);

答案 3 :(得分:3)

所以你有两个选择回归

选项1: 对于值类型:intdatetime等,您可以返回默认值(0, DateTime.minValue, Guid.Empty),或使用可以返回nullable, Guid?, int?的{​​{1}}等。 。虽然可以为空的是可耻的,但人们往往会因为某种原因而回避它,所以使用它有时取决于你工作的团队。我知道那些不使用它们的团队。他们认为他们的尴尬和害羞,在这种情况下突然添加它们使它在其余的代码中突出,因为它不遵循应用程序其余部分的伪标准。就个人而言,我喜欢无用的,但不是每个人都有同样的感觉。

对于参考类型,您只需返回null 为集合返回null:关于处理集合的另一个争论是你应该返回什么。如果集合中没有任何内容,您可以返回null,或者您可以返回空列表等。您可以拆分它们意味着不同的东西,但是再一次,您应该遵循程序的其余部分。你需要记住的是,很多人忘记了像null语句这样的集合变量调用foreach,如果集合对象是GetEnumerator(),那将抛出异常。

选项2: 当你找不到你正在寻找的对象时,你会抛出一个异常,说明你找不到你想要的东西。

关于使用哪一方存在激烈的争论,一方面返回默认值不会直接警告调用方法没有找到某些东西,它必须知道返回值实际上不是id (有时这不如你想象的那么明显)。另一方面,抛出异常意味着调用方法必须知道可能会引发异常。真的取决于你的情况决定哪个是正确答案。

答案 4 :(得分:1)

您可以返回Guid.Empty。或抛出异常(内置的一个或自定义的ItemNotFoundException)。或者在return中使用Nullable类型声明您的方法并返回null:

public Nullable<Guid> FindTermIDFromCustomProperty() 
{
     // Logic here to find an item and return the guid 
}

答案 5 :(得分:1)

尝试使用可空类型。对于值类型,您可以通过添加?,例如

使它们可为空

INT? x = null;

if(x!= null) {

}