Список <T>Содержит свойство T? - PullRequest
0 голосов
/ 07 декабря 2011

Я получил этот список:

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

и позже в моем проекте я получил string, который соответствует Type.FullName.Дело в том, что я хотел бы проверить, содержится ли моя строка в моем списке, но мне не удается избежать использования цикла :( Я ищу что-то вроде:

_AbstractTypes.FullName.Contains(myString)

Я абсолютно осведомленчто мой предыдущий код вообще не компилируется, но это именно то, что я ищу! Заранее спасибо за любую помощь

Ответы [ 6 ]

6 голосов
/ 07 декабря 2011

Вы можете использовать Linq, но речь идет только о конструкции без цикла, код под капотом должен делать цикл, если вы хотите сделать это лучше, вы можете использовать HashSet<T>.

* 1003.* Код 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
1 голос
/ 07 декабря 2011

Этот код:

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

Должен делать работу.

Он будет проверять предикат для всех типов до тех пор, пока один из них не будет удовлетворен (возвращено значение true) или отсутствует (возвращено значение false).

0 голосов
/ 07 декабря 2011

Я думаю, вы можете узнать, содержится ли тип в вашем списке таким образом:

if (_AbstractTypes.Contains(typeof(string)))
{
    // Do Something
}
0 голосов
/ 07 декабря 2011

Вы не можете избежать зацикливания.

Вы можете сделать (с зацикливанием):

bool check = _AbstractTypes.Any(item => item.FullName == myString);
0 голосов
/ 07 декабря 2011

Вы, вероятно, хотите что-то вроде этого:

_AbstractTypes.Any(t=>t.FullName.Contains(myString))
0 голосов
/ 07 декабря 2011

Если список содержит элементы, вы можете сделать что-то вроде _AbstractTypes.First().GetType().

...