我有一个自定义活动,用户从重新托管的设计器环境中的下拉列表中选择一个变量。我的问题是我想获得变量的名称及其值。
假设我的自定义活动有“InArgument MyVar {get; set;}”。
我目前通过解析“((Microsoft.VisualBasic.Activities.VisualBasicValue)MyVar.Expression).ExpressionText”来获取变量的名称。还有更好的办法吗?
答案 0 :(得分: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);
}
不保证,谨慎使用