从InArgument获取变量名称

问题描述:

我有一个自定义活动,用户从重新主办的设计器环境中的下拉列表中选择一个变量。我的问题是我想获得变量的名称及其值。
假设我的自定义活动具有“InArgument MyVar {get; set;}”。 我目前通过解析“((Microsoft.VisualBasic.Activities.VisualBasicValue)MyVar.Expression).ExpressionText”来获取变量的名称。有没有更好的方法?从InArgument获取变量名称

直到运行时,才能确定地知道参数的真实值。

但是,你可以把它的默认值,使用这些扩展方法:

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); 
    } 

得不到保障,请谨慎使用

+0

你看,当变量传递给InArgument运行我想获取传递的变量的名称。 – Arvand 2012-04-09 05:36:08

+0

@Arvand你不想在设计时看到它的价值,你确实希望它在运行时是否正确? 只是澄清一下,为什么你想在运行时的变量名? – 2012-04-09 16:48:53

+0

因为变量是基于业务逻辑创建的,所以当打开设计器时,变量是在xaml文件中自动创建的,并且业务对变量有意义,所以在运行时我将的字典从我的自定义活动到其他方法。 – Arvand 2012-04-10 09:04:18