2012-07-21 65 views
4

我函数是这样的:如何从泛型函数中返回null?

private T DeserializeStream<T>(Stream data) where T : IExtensible 
    { 
     try 
     { 
      var returnObject = Serializer.Deserialize<T>(data); 
      return returnObject; 
     } 
     catch (Exception ex) 
     { 
      this.LoggerService.Log(this.AccountId, ex); 
     } 

     return null; 
    } 

一切都很好,但它抱怨return null;部分

无法将表达式类型 '空' 键入 'T'

我如何从这样的函数返回null?

+6

您可以返回'默认(T)'在本文中回答:http://stackoverflow.com/questions/302096/how-can-i-return-null-from-a-generic-method-in- c?rq = 1 – mindandmedia 2012-07-21 20:58:09

回答

7

您可以添加一个通用约束,即T是一个类(因为结构是值类型,不能是null)。

private T DeserializeStream<T>(Stream data) where T : class, IExtensible 

由于@mindandmediacommented,另一种是返回default of T - 这将允许它在值类型(例如一个Nullable<T>int32等)工作。

+0

我把这个作为答案,它被转换成评论... – mindandmedia 2012-07-21 21:00:19

+0

@mindandmedia - 你没有提到通用约束。你把一个句子和一个链接 - 转换成一个评论。如果你再多投入一点,它就会成为答案。只是指出似乎发生了什么。 – Oded 2012-07-21 21:01:42

+0

@Oded命令是类,IExtensible – HatSoft 2012-07-21 21:02:18