0

ユーザーが再ホストされたデザイナー環境でドロップダウン リストから変数を選択するカスタム アクティビティがあります。私の問題は、変数の名前とその値を取得したいということです。
カスタム アクティビティに「InArgument MyVar{ get; set; }」があるとします。現在、「((Microsoft.VisualBasic.Activities.VisualBasicValue)MyVar.Expression).ExpressionText」を解析して変数の名前を取得しています。もっと良い方法はありますか?

4

1 に答える 1

0

実行時まで、引数の真の値を確実に知ることはできません。

ただし、これらの拡張メソッドを使用して、デフォルト値を使用できます。

    public static T GetImediateValueOrDefault<T>(Activity<T> activity, ModelItem modelItem)
    {
        if (activity == null)
            return default(T);

        var exprAsLiteral = activity as Literal<T>;
        if (exprAsLiteral != null)
            return exprAsLiteral.Value;

        var exprAsVbValue = activity as Microsoft.VisualBasic.Activities.VisualBasicValue<string>;
        if (exprAsVbValue != null)
            return modelItem.GetDefaultValueOfScopedVariable<T>(exprAsVbValue.ExpressionText);

        return default(T);
    }

    public static T GetDefaultValueOfScopedVariable<T>(this ModelItem modelItem, string variableName)
    {
        IEnumerable<ModelItem> scopedVariables = modelItem.GetScopedVariables();
        ModelItem variableModelItem = scopedVariables.FirstOrDefault(v => Equals(variableName, v.Properties["Name"].ComputedValue));
        if (variableModelItem == null)
            throw new KeyNotFoundException();

        Variable<T> variable = variableModelItem.GetCurrentValue() as Variable<T>;
        if (variable == null)
            return default(T);

        return GetImediateValueOrDefault(variable.Default, modelItem);
    }

保証されていません。注意して使用してください

于 2012-04-09T03:19:49.343 に答える