Как вы используете метод расширения в рабочем процессе InvokeMethod? - PullRequest
2 голосов
/ 26 июля 2010

У меня есть System.Activities.Statements.InvokeMethod активность.Я пытаюсь активировать его с помощью

TargetType: (null)
TargetObject: licxFiles //an ICollection<string>
MethodName: StoreIfHasValue

StoreIfHasValue:

public static void StoreIfHasValue(this ICollection<string> collection, string value)
    {
        if (value.IsNullOrEmpty( )==false)
            collection.Add(value);
    }

Единственный параметр, который я передаю от дизайнера рабочих процессов:

CheckForLicx:

        public static string CheckForLicx(string projPath, XDocument proj)
    { 
        var ns=proj.Root.Name.Namespace;
        var q = from refs in proj.Root.Elements(ns+"ItemGroup").Descendants(ns+"EmbeddedResource")
                where refs.Attribute("Include").Value.EndsWith(".licx", StringComparison.CurrentCultureIgnoreCase)
                select refs.Attribute("Include").Value;
        var licx=q.FirstOrDefault( ); //assume there is only one .licx file reference in the project
        if (licx.IsNullOrEmpty( ))
            return null;
        return System.IO.Path.Combine(projPath, licx);
    }

Проблема в том, что я использую вызов метода в качестве параметра?Или почему это дает ошибку

'ICollection`1' does not have a public instance method named 'StoreIfHasValue' matching the parameter types, generic type arguments, and generic type constraints supplied to InvokeMethod 'Check for and store'.

1 Ответ

2 голосов
/ 26 июля 2010

Никогда не пробовал, но я подозреваю, что вам нужно воспринимать это как вызов статического метода, который действительно есть, и передавать объект в качестве первого параметра. Поэтому очистите свойство TargetObject и установите TargetType для класса, который реализует метод расширения.

...