A problem with most OO programming languages is that methods are declared as part of the class itself. This makes it difficult to extend an existing class you don&#x27;t control, or reuse a method elsewhere.<p>C# supports extension methods, which are basically static helper methods whose first parameter is the type to which you want to attach the method. For example, I could create a &#x27;ToTitleCase&#x27; extension method on type &#x27;string&#x27;. Then, given a string instance, I can simply do &#x27;myString.ToTitleCase()&#x27;.<p>One step further would be to add support for multiple parameters. For example, instead of listing all functions that accept an &#x27;int&#x27; as an argument, you could ask for all functions that accept both an &#x27;int&#x27; and a &#x27;string&#x27; as an argument. Given 3 and &quot;test&quot;, the &#x27;repeat&#x27; function could be suggested, resulting in &quot;testtesttest&quot;.<p>To make things even better, one could provide (explicitly or not) the  return type of the function they&#x27;re looking for. For example, if you&#x27;re assigning to a variable of type &#x27;int&#x27;, and all you have is a &#x27;string&#x27;, then you probably want to see a list of all functions that take a &#x27;string&#x27; as an argument, and return an &#x27;int&#x27;. In that case, you would see functions like &quot;parseInt&quot; or &quot;getLength&quot;. It&#x27;s kind of like playing domino, where you already know the type of the input and output, and only need to connect them together. Keep in mind that you can&#x27;t always transform one type to the other in a single function call, which means the system would also need to recommend combinations of functions, such as &quot;parseDateTime + getDayOfWeek&quot; when you need to transform a &#x27;string&#x27; to an &#x27;int&#x27;. Perhaps the name of the arguments could even be used as some kind of sorting heuristics (a &#x27;string&#x27; variable named &quot;date&quot; surely should be parsed to some kind of DateTime at some point).