Runner.GetOrReplace C# (CSharp) Méthode

GetOrReplace() public méthode

public GetOrReplace ( string key, Func func ) : string
key string
func Func
Résultat string
    public string GetOrReplace(string key, Func<string> func)
    {
        Func<string> wrappedfunc = () =>
        {
            var result = func();
            if (!string.IsNullOrWhiteSpace(result))
            {
                return result;
            }
            var message = string.Format("Could not derive value for '{0}'.", key);
            throw new Exception(message);
        };
        var xDocument = XDocument.Parse(NuspecContent);
        var ns = xDocument.Root.GetDefaultNamespace();

        var metaData = xDocument.Element(ns + "package").Element(ns + "metadata");
        var xElement = metaData.Element(ns + key);
        string value;

        var searchKey = "$" + key + "$";
        if (xElement == null)
        {
            value = wrappedfunc();
            xElement = new XElement(ns + key, value);
            metaData.Add(xElement);
        }
        else
        {
            if (string.IsNullOrWhiteSpace(xElement.Value))
            {
                value = xElement.Value = wrappedfunc();
            }
            else if (xElement.Value.Contains(searchKey))
            {
                value = xElement.Value.Replace(searchKey, wrappedfunc());
                xElement.Value = value;
            }
            else if (xElement.Value.Contains("$"))
            {
                value = wrappedfunc();
            }
            else
            {
                value = xElement.Value;
            }
        }
        NuspecContent = xDocument.ToString();
        NuspecContent.Replace(searchKey, value);
        return value;
    }

Usage Example

 public void NoElement()
 {
     var input =
     @"<?xml version='1.0'?>
     <package >
       <metadata>
       </metadata>
     </package>".Replace("'", "\"");
     var runner = new Runner
     {
         NuspecContent = input
     };
     var output = runner.GetOrReplace("version", () => "1.2.3");
     Assert.AreEqual("1.2.3", output);
     Approvals.Verify(runner.NuspecContent);
 }