Q: Fast search of objects in a collection I'm writing a C# application that should do a fast search inside of an array.
I have a big collection that I'm loading from a file of objects of the following type
public class Info {
   public long Start { get; set; }
   public long End { get; set; }
   public string Info { get; set; }
   ...
}

I need a fast way to find an object in that array where 
Start <= SomeValue && End >= SomeValue
Need only the first match.
Please advice me what collection type should I use
and may be a faster algorithm than just iterating through the objects.
SOLUTION
"interval tree" structure was the best solution for me. It seems like > 30 times faster than iterating items in a collection until find and it took less than 1 ms to find items. Used this implementation https://github.com/mbuchetics/RangeTree
Thanks a lot guys

A: Use LINQ FirstOrDefault. This will return the first matching item in the collection or null if nothing is found.
infoList.FirstOrDefault(i => i.Start <= someValue && i.End >= someValue);


A: You can also use ParallelLinq to get even faster results:
//Some values
long start = 0;
long end = 100;

Info result = infoList.AsParallel().FirstOrDefault(i => i.Start <= start && i.End >= end);


A: Hello dear you can search in an array fastly by using binaray search this is the fasted machanisim for searching in an array ....
Hope this will help you!
public static int BinarySearch(int[] arr, int lowBound, int highBound, int value)
{
    int mid;
    while (lowBound <= highBound)
    {
        mid = (lowBound + highBound) / 2;
        if (arr[mid]<value)
        {
            lowBound = mid + 1;
            continue;
        }
        else if (arr[mid] > value)
        {
            highBound = mid - 1;
            continue;
        }
        else
        {
            return mid;
        }
    }
    return -1;//value not found
}


A: you can use (because it will be faster)
infoList.SingleOrDefault(x => x.Start <= x.SomeValue && x.End >= x.SomeValue); 

or  
infoList.FirstOrDefault(x => x.Start <= x.SomeValue && x.End >= x.SomeValue); 

here an explanation:

Whenever you use SingleOrDefault, you clearly state that the query
  should result in at most a single result. On the other hand, when
  FirstOrDefault is used, the query can return any amount of results but
  you state that you only want the first one.

