Pairing anagrams in a string list
Algorithm of PairAnagrams()  

You are calling 


var sortedWord1 = item.ToArray();
Array.Sort(sortedWord1);



inside the inner loop, but item won't change there.  

One time you are using Array.Sort(sortedWord1); and two lines below Array.Sort&lt;char&gt;(sortedWord2); Be consistent in your style.  

This  


for (i = 0; i &lt; sortedWord2.Length; i++)
{
    if (sortedWord2[i] != sortedWord1[i])
    {
        break;
    }
}
if (i == sortedWord1.Length)
{
    dictionary.Add(item, item2);
}  



can be replaced by  

if (sortedWord1.SequenceEqual(sortedWord2))
{
    dictionary.Add(item, item2);
}  


By using .Where() on the wordList at the for each you can omit the check for length and equal.  

By using the .OrderBy() on the chars of the words, there won't be a need to call .ToArray() and Array.Sort().

This reduces the code to  

Dictionary&lt;string, string&gt; PairAnagrams(List&lt;string&gt; words)
{
    Dictionary&lt;string, string&gt; pairedAnagrams = new Dictionary&lt;string, string&gt;();
    foreach (var word in words)
    {
        if (pairedAnagrams.ContainsValue(word))
        {
            continue;
        }

        var sortedWord1 = word.OrderBy(c =&gt; c);
        int wordLength = word.Length;
        foreach (var word2 in words.Where(w =&gt; w.Length == wordLength &amp;&amp; !word.Equals(w)))
        {
            if (sortedWord1.SequenceEqual(word2.OrderBy(c =&gt; c)))
            {
                pairedAnagrams.Add(word, word2);
            }
        }
    }
    return pairedAnagrams;
}


Constructor  

The constructor of an object should be used only for constructing the object. You are misusing it to start the action.  

Naming  


variable names should be correctly spelled. anagarms vs anagrams  
parameters should't be pre/post fixed by their types. List&lt;string&gt; wordsList-> List&lt;string&gt; words  


General  


no need for using System.Security.Cryptography