2010-10-21 68 views
-2

如何編寫一個擴展方法,該方法應該檢查對象的值,如果object爲null,那麼它應該返回null否則值{不在接收端執行轉換}。C#擴展方法爲NULL或值

像...

public static object GetDefault(this object obj) 
{ 
    if (obj == null) return null; 
    else return obj; 
} 

我的意思是沒有鑄造我可以檢查空?

int? a=a.GetDefault(); 

ContactType type=type.GetDefault(); [For EnumType] 

string s=a.GetDefault() 
+8

該要求似乎毫無意義。只需將該對象直接分配給可空類型。 – Oded 2010-10-21 13:38:39

+6

如果爲null,則返回null,否則返回值...對於馬上使用該值有何不同? – GSerg 2010-10-21 13:39:18

+1

不要忘記'default(T)'。 – bzlm 2010-10-21 13:39:28

回答

1

這應該工作:

public static class ExtensionMethods 
{ 
    public static T GetObject<T>(this T obj, T def) 
    { 
     if (default(T).Equals(obj)) 
      return def; 
     else 
      return obj; 
    } 
} 

我添加了一個參數def,因爲我希望你能想返回該默認值時obj爲null。否則,您總是可以省略T def參數並返回null

+0

不需要'def'參數。這就是['default'](http://msdn.microsoft.com/en-us/library/xwth0h0d.aspx)關鍵字的用途。 – Oded 2010-10-21 13:40:51

+4

在這個方法有用的世界裏,只要'return obj怎麼樣? def;' – 2010-10-21 13:41:07

+0

@Oded,我假設這允許你說'foo.GetDefault(new Foo {Bar = 7})',如果'foo'爲空,它會給你一些'Foo'的默認實例。 – 2010-10-21 13:42:12