Parse through an XDocument efficiently and match values to matching object
I'm going to revew only this part as I think the rest of it is just for demonstration purposes.


private static void UpdateParams(XDocument xDoc)
{
  IEnumerable&lt;Param&gt; filteredParamList;
  foreach (XElement xElement in xDoc.Root.Elements())
  {
      filteredParamList = paramList.Where(param =&gt; param.xmlName == xElement.Name.LocalName);
      if (filteredParamList != null &amp;&amp; filteredParamList.Any())
      {
          filteredParamList.Single().Value = double.Parse(xElement.Value) * filteredParamList.Single().scalingFactor;
      }
  }
}




Try to avoid writing methods like this one, where one of the parameters is some static field. This makes it very difficult to test because of the external dependency. If possible you should pass the parameter as anoter argument. I had a hard time understanding your code.
Try to also avoid modifying methods parameters like you do here with the paramList. It's usually much better to return a new result. Such methods are called pure methods and are much easier to test and to maintain. Modifying global objects can make debugging very painful.
Use the smallest possible type for parameters (or the most general/abstract). This means, your method doesn't need the XDocument, it can do its job just fine with an IEnumerable&lt;XElement&gt;.
Choose more meaningful method names. UpdateParams is too general and doesn't say anything about what is going to be updated.
You neither need the foreach, nor Where, nor Any, nor Single, nor the null check. All this can be replaced by a much nicer join.




This is how it could look like after refactoring:

private static IEnumerable&lt;Param&gt; ScaleParameterValues
(
    IEnumerable&lt;XElement&gt; elements, 
    IEnumerable&lt;Param&gt; parameters
)
{
    return
        from xe in elements
        join p in parameters on xe.Name.LocalName equals p.xmlName
        select new Param(p.xmlName, p.scalingFactor) 
        { 
            Value = p.scalingFactor * double.Parse(xe.Value) 
        };
}