I’m implement a data structure which is used to convert a time range to human-readable text, e.g. 0-7 days to “Within 1 Week”, 7-30 days to “1 Week to 1 Month”. Here I use Tuple<int,int> to represent the time range but not two integers, because we can define a Dictionary<Tuple<int, int>, String> to represent a map from time range to text.
Dictionary<Tuple<int, int>, String> timeRanges = new Dictionary<Tuple<int, int>, String>();
timeRanges.Add(new Tuple<int, int>(0, 7), "Within 1 Week");
timeRanges.Add(new Tuple<int, int>(7, 14), "1 Week to 2 Weeks");
But how could we represent “Over 2 Weeks”? Apparently the second parameter of the Tuple should be infinity.
To represent infinity for an integer, we can use int.MaxValue (it’s actually Int32.MaxValue)
So we can solve above problem using following code
timeRanges.Add(new Tuple<int, int>(14, int.MaxValue), "Over 2 Weeks");
Why Convert JAR to .NET DLL
Imagine your company builds an online file converter, and its backend programming language is Java because of its position in web development. And in this project you build a file parsing library (jar format certainly) which is used to parse different types of files.
After this project is done, your boss decides to create a Windows desktop version for this software. Now the best choice is .NET, but how can you reuse your java parsing library? That’s why IKVM.NET existed.
IKVM.NET is a .NET implementation of Java which allows us to run Java code in .NET (C#, VB.NET, etc.) easily. It includes following three components:
- JVM in .NET (which means you can run java byte code in .NET)
- Java class library implementation
- A compiler converting java byte code to .NET IL
There are many famous Java projects converted to .NET using IKVM.NET already, such as Tika, Curator, etc. Even Mono has include it as a built-in component.
ikvmc libpst.jar -target:library
This will generate a DLL file named libpst.dll from libpst.jar in current directory.
Without -target:library option, it will generate an exe file.