2012-10-18 22 views
2

我想限制的數據類型,我的方法接受使用泛型內建類型:使用泛型可以將提供的類型限制爲內置?

內建類型:http://msdn.microsoft.com/en-us/library/ya5y69ds(v=vs.80).aspx

名單不同於值/引用類型。我只想支持內置的,不是所有的值類型,並且還支持字符串,這是一個引用類型。

這可能嗎?

編輯:

使用約束可以限制值類型是這樣的:

T GetObject<T> where T: struct; 

這將不允許串穿過雖然。

+0

看起來不像它: http://msdn.microsoft.com/en-us/library/d5x73970.aspx –

+0

只爲每種類型寫一個重載? – Rawling

+3

你想解決什麼問題? – clearpath

回答

0

不,不幸的是這是不可能的。

我想你可以做的最接近的是如下:

T GetObject<T>() 
{ 
    if (!(typeof(T) is typeof(int) 
     || typeof(T) is typeof(uint) 
     ... 
     || typeof(T) is typeof(string))) 
    { 
     //Custom exception class for this purpose 
     throw new TypeArgumentException("Invalid type parameter \"T\"."); 
    } 

    ... 
} 

沒有這麼好的,但做這項工作。

2

這是不可能與泛型。

如果你需要做到這一點,並保留編譯時檢查你唯一的選擇是提供您的方法的重載與不同的參數類型,使得所有的內置類型都包括在內。

相關問題