我有一個IEnumerable<T>
參數的方法。
T
可以是built-in .NET types像int
或string
或自定義類這樣的一個:如何從IEnumerable <MyClass>告訴IEnumerable <int>?
class MyClass
{
public string Foo{ get; set; }
public int Bar{ get; set; }
}
我怎麼能認識編程如果T
是內置類型之一?
我知道我可以做這樣的事情:
switch (typeof(T).Name.ToLower())
{
case "int":
case "string":
case "...": // and so on...
Console.WriteLine("It's a built-in type!");
break;
default:
Console.WriteLine("It's a custom class!");
break;
}
...但必須有一個較短/更簡單的方法,對嗎?
編輯:
好的球員,非常感謝你的答案爲止。
但我仍然不確定哪一個是最適合我的情況。
什麼其實我是想做到這一點:
我正在寫一個庫IEnumerable<T>s
轉化爲ADODB.Recordsets
。
在每次轉換開始時,我需要創建一個空的Recordset並向其添加字段。
如果T
是一個自定義類,我必須loop through its properties並在記錄集中爲每個屬性T
(帶有屬性的名稱和類型)創建一個字段。
但是,如果T
是自定義類,則通過屬性循環才能正常工作。
例如,它T
是string
,我得到string
(Chars
和Length
)的屬性,在這種情況下這對我沒有用處。
這意味着只檢查它是否是原始類型是不夠的 - 我需要識別DateTime
和GUID
之類的東西,並且可能還有更多。
(我不得不承認,我沒有注意到DateTime
不在內置類型列表中)。
所以我想我真正想要的是:
如果T
有用戶定義的屬性,我可以循環,或不。
這是否有意義(如果它在所有喜歡int
我不關心像string
沒有屬性或屬性無論)?
但是,我仍然不確定選擇哪個答案。
driis'和Jon Skeet的答案都意味着我基本上必須列出很多類型(Jon的答案比Driis的答案更多)。
目前,我傾向於選擇Ron Sijm的回答(儘管人們顯然更喜歡其他答案),因爲我想簡單地檢查"System."
是做我想做的事情的最短途徑,即使它看起來不好,那優雅的...
可能的重複[有沒有函數來檢查一個對象是否是內置數據類型?](http://stackoverflow.com/questions/1114799/is-there-a-function-to-check-if- an-object-is-a-builtin-data-type) – Damith
如果有人有興趣,我只寫了一個[answer](http://stackoverflow.com/questions/8029023/how-to-tell-an-ienumerableint -from-an-ienumerablemyclass/8056852#8056852)關於我爲什麼選擇Jon的答案以及我的實際解決方案的外觀。 –