The following code works for me.
private IDictionary<int, List<int>> BuildDictioninaryOfRookContiguity()
{
IDictionary<int, List<int>> neighborDictionary = new Dictionary<int, List<int>>();
using (ComReleaser comReleaser = new ComReleaser())
{
IFeatureCursor featureCursor = (IFeatureCursor)_featureClass.Search(null, false);
comReleaser.ManageLifetime(featureCursor);
IFeature currentFeature;
while ((currentFeature = featureCursor.NextFeature()) != null)
{
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = currentFeature.Shape;
spatialFilter.GeometryField = _featureClass.ShapeFieldName;
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelTouches;
ISelectionSet selectionSet = _featureClass.Select(spatialFilter,
esriSelectionType.esriSelectionTypeIDSet,
esriSelectionOption.esriSelectionOptionNormal, null);
ITopologicalOperator topologicalOperator = (ITopologicalOperator) currentFeature.Shape;
List<int> neighborIDs = new List<int>(selectionSet.Count);
IEnumIDs enumIDs = selectionSet.IDs;
int ID = enumIDs.Next();
while (ID != -1)
{
IPointCollection pointCollection = (IPointCollection) topologicalOperator.Intersect(_featureClass.GetFeature(ID).Shape, esriGeometryDimension.esriGeometry0Dimension);
if(!(pointCollection.PointCount == 1))
neighborIDs.Add(ID);
ID = enumIDs.Next();
}
neighborDictionary.Add(currentFeature.OID, neighborIDs);
}
}
return neighborDictionary;
}