Many C# variable types hold a single value. But how to store a pair of related values? That's where C# KeyValuePair structure comes in. The KeyValuePair structure (not class) is a generic structure that lets programmers work with two values at once.
Notice that it is mostly for convinience because there is nothing stopping you from writing your own C# struct to hold two or more values. KeyValuePair simply makes things faster.
The C# KeyValuePair is generic, which means that the programmer can specify what type of data it will hold. So for example, if you want to store key/value pairs of strings and integers, you can define a KeyValuePair as:
KeyValuePair<string, int> keyValue = new KeyValuePair<string, int>("string", 1);
The key and values can then be accessed through the Key and Value property respectively. There is one downside. Notice that the values of the KeyValuePair must be assigned when a new instance is created. The Key and Value properties are read-only so you cannot modify their values.
C# KeyValuePair types do not have many more methods. It can be noted that the ToString function was nicely implement to display both values in a [key, value] format.
Finally it is important to remember that a KeyValuePair is a structure NOT a class. There are some differences such as where the object is stored in memory (in the stack in this case) and the fact that it does not work based on references.