旧项目的代码类似于
Microsoft.Action<StringBuilder, string, string, string, bool> appendTag =
(StringBuilder sb, string tagName, string curVal, string priorVal,
bool checkPrior) =>
{
if (generateEmptyTags || curVal != string.Empty)
{
sb.Append("<");
sb.Append(tagName);
if (checkPrior && (generateEmptyTags || foundPrior))
{
sb.Append(" prior_value=\"");
sb.Append(priorVal.XmlEncoded());
sb.Append("\"");
}
sb.Append(">");
sb.Append(curVal.XmlEncoded());
sb.Append("</");
sb.Append(tagName);
sb.Append(">");
}
};
目前删除了Microsoft对象的引用,因此有人可以帮助使用Lambda和Linq重写内联函数,而不需要Microsoft.Action
委托。新的内联函数应该接受四个参数
不知道Lambda和Linq所以需要帮助。
该项目位于.Net framework 3.5中,因此System.Action仅接受4个参数和错误:
我也尝试过System.Action,但它给出了编译错误 System.Action'需要'4'类型参数。
所以现在需要帮助来编写我自己的内联函数,它将取代Microsoft.Action
答案 0 :(得分:2)
好的,你好.NET 3.5!
您可以定义自己的委托以绕过.NET 3.5限制:
public delegate void Action<T1,T2,T3,T4,T5>
(StringBuilder arg1, string arg2, string arg3, string arg4, bool arg5);
鉴于此,以下代码将编译:
Action<StringBuilder, string, string, string, bool> appendTag =
(StringBuilder sb, string tagName, string curVal, string priorVal, bool checkPrior) =>
{
...
};
这个解决方案可能比pkuderov的答案更少侵入,这是另一个好的选择。这取决于你确定哪一个更适合你自己的情况。
答案 1 :(得分:1)
由于该评论look at the error System.Action<T1,T2,T3,T4>' requires '4' type argument This error I get when I compile. I am using .net framework 3.5
我建议你减少参数数量为2
创建将容纳string tagName, string curVal, string priorVal, bool checkPrior
的结构并将其对象传递给Action<StringBuilder, YourStruct>
并重构lambda的主体以满足此转换。