2011-12-07 26 views
0

我得到這個名單:做一個清單<T>包含T的一個屬性嗎?

private static List<Type> _AbstractTypes = new List<Type>(); 

,並在我的項目後,我接到一個string對應於Type.FullName。 的事情是,我想檢查我的字符串包含在我的名單,但我不設法避免使用循環:( 進出口尋找類似:

_AbstractTypes.FullName.Contains(myString) 

我絕對知道我以前的代碼完全不但是編譯是那種事情IM的尋找! 預先感謝任何幫助

+0

所以你不要想要使用循環?或者你只是想幫助實現一個循環?因爲我認爲使用foreach循環會得到期望的結果。 – stackr

回答

6

您可以使用LINQ,但我們只,代碼下談論環少建在這裏引擎蓋必須做一個循環,如果你想要做得更好,你可以使用HashSet<T>

LINQ的代碼看起來是這樣的:

_AbstractTypes.Any(t => t.FullName == myString); 

HashSet<Type>代碼看起來是這樣的:

var types = new HashSet<Type>(); 
types.Add(typeof(int)); //Fill it with types 
types.Add(typeof(double)); 

//Check by getting types from their string name, you could of course also cache those types 
Console.WriteLine("Contains int: " + types.Contains(Type.GetType(intName))); //True 
Console.WriteLine("Contains float: " + types.Contains(Type.GetType(floatName))); //False 
+0

+1爲HashSet

+0

_AbstractTypes.Any(t => t.FullName == myString);是完美的:) 通過「無循環」我的意思不是一些老派的代碼和你的答案是我正在尋找;)thx! –

+0

@GuillaumeSlashy Linq看起來很現代,很酷,所以它應該做一個不尋找老派的訣竅:-) –

0

如果列表中包含的元素,你可以這樣做_AbstractTypes.First().GetType()

1

此代碼:

bool result = _AbstractTypes.Any(t=>t.FullName == myString); 

應該做的工作。

它將測試針對所有類型的謂詞,直到滿足(返回true)或none(返回false)爲止。

0

你可能想是這樣的:

_AbstractTypes.Any(t=>t.FullName.Contains(myString)) 
0

你不能避免循環。

你可以這樣做(與循環幕後):

bool check = _AbstractTypes.Any(item => item.FullName == myString); 
0

我想你能找出一個類型包含在你的列表方式:

if (_AbstractTypes.Contains(typeof(string))) 
{ 
    // Do Something 
} 
相關問題