[ https://issues.apache.org/jira/browse/LUCENENET-481?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13238661#comment-13238661 ]
Christopher Currens commented on LUCENENET-481: ----------------------------------------------- If you're talking about the termComparator, that wasn't made generic until 3.1. The comparator in 3.0.3 can't be ported the way it is anyway because of Java's type system, but I just want to make sure you're porting 3.0.3 to keep everything in line with the rest of the .NET versions. You'll find that the 3.x version in java uses a few other additions to the main lucene library that aren't yet available in 3.0.3. This problem should be easily solved without reflection. The comparator used basically requires that it be a {{KeyValuePair<TKey, TValue>}}, or more specifically, a {{KeyValuePair<string, TValue>}}. There are actually only 2 different types that uses that termComparator: {{KeyValuePair<string, ArrayIntList>[]}} and {{KeyValuePair<string,Info>[]}}. An exception to that is the {{private static sort(Dictionary<K,V>)}} method, but that can be solved with a static method, a type constraint (which is already implied in the java version) and some type inference (as a nicety). I had ported most of this at one point (somewhere on my home computer), and if memory serves me correctly, I think this is how I solved this problem. You can use this if you want: {code} class KvpComparer { public static int Comparer<TKey, TValue>(KeyValuePair<TKey, TValue> x, KeyValuePair<TKey, TValue> y) where TKey : IComparable<TKey> { if (x.Equals(y)) return 0; return x.Key.CompareTo(y.Key); } } sealed class KvpComparer<T> : KvpComparer, IComparer<KeyValuePair<string, T>> { public int Compare(KeyValuePair<string, T> x, KeyValuePair<string, T> y) { return Comparer(x, y); } } {code} You can create the two instances you need for the {{<string,Info>}} and {{<string,ArrayIntList>}} types. For the {{Map.Entry<K,V>[] sort(HashMap<K,V> map}} method, constrain {{K}} to {{IComparable<K>}}, and then you can use it like {{Array.Sort(entries, KvpComparer.Compare)}}, which is nice because it's one less object you need to create (or more) for each type passed into sort. Alternatively, since the {{sort}} method is private, and only uses those two types, you can just change the signature and pass in one of the comparers instead, removing the base class from the equation. > Port Contrib.MemoryIndex > ------------------------ > > Key: LUCENENET-481 > URL: https://issues.apache.org/jira/browse/LUCENENET-481 > Project: Lucene.Net > Issue Type: New Feature > Affects Versions: Lucene.Net 3.0.3 > Reporter: Christopher Currens > > We need to port MemoryIndex from contrib, if we want to be able to port a few > other contrib libraries. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira