2013-02-15 77 views
4

例如操作結果鑄造,爲什麼使用「爲」鑄造對象爲null,與C#動態

比方說group.SupportedProducts爲[「測試」,「你好」,「世界」]

var products = (string[]) group.SupportedProducts; 

結果正確地是一個字符串數組,它包含上述3個要素中的「產品」 - 「測試」,「你好」和「世界」

然而,

var products= group.SupportedProducts as string[]; 

結果產品爲空。

+0

有趣的問題 – sehe 2013-02-15 23:16:21

+0

@zerkms這意味着你不同意第一條語句「作品」(我恨那個動詞題) – 2013-02-15 23:16:51

+0

@Shmiddty數組是不是基本類型吧? – 2013-02-15 23:18:08

回答

9

想必group.SupportedProducts實際上一個string[],但它的東西,它支持自定義轉換string[]

as從來沒有調用自定義轉換,而鑄造。

樣品展示這一點:

using System; 

class Foo 
{ 
    private readonly string name; 

    public Foo(string name) 
    { 
     this.name = name; 
    } 

    public static explicit operator string(Foo input) 
    { 
     return input.name; 
    } 
} 

class Test 
{ 
    static void Main() 
    { 
     dynamic foo = new Foo("name"); 
     Console.WriteLine("Casting: {0}", (string) foo); 
     Console.WriteLine("As: {0}", foo as string); 
    } 
} 
+0

哇。頭腦風暴。我將所有用戶定義的轉換都放在了一起,因爲OP說這是'動態'。我認爲UDC從未被考慮過,除非在編譯時(即不在通用設置中) – sehe 2013-02-15 23:25:59