Here are more details to explain the behaviors you met.
Basically, when we search for a street with a zip code, we think the street name is the key part with the highest priority and the zip code is only treated as a filter condition. If there is no matched result by the street name part, then it will return no result. If we found some results simply with street name, then we will use the zip code to filter the results. However, there did have one special case:
if there is only one matched result
found with street name, then it will not go into use the zip code filter any more, we believe this is an enhancement to improve the user experience like other map services like Google or Bing, you can try "510 PARK AVE 75206" in Google Map and the google map will correct it as "510 Park Ave 75201".
Therefor, for the "Bennent Ave, 75206", we can find a match by "Bennent Ave", we can find only one street item matched, then we will not use the zip code filter and use the matched zip code instead. But for "510 PARK AVE 75206", we can find a lot of "Park Ave", but none of them are verified by "75206" zip code, so, no matched item returned.
Actually, I would prefer you to use Match(string searchText), it will include zip info no matter whether there is a street is found. For your case, you can use some codes as below to fit your requirement:
//matchResult = usaGeocoder.Match("Bennent Ave 75206");
matchResult = usaGeocoder.Match("Park Drive 75206");
foreach (GeocoderMatch item in matchItems)
if (item.NameValuePairs["Zip"] == zipcode)
// exactly what we need to find.
// zip code is not incorrect. let's get zip code info.
else if (item.NameValuePairs.ContainsKey("Zip"))
// let's get the zip info
Please let us know if you have any questions.