可以表达式>和destination.x=source.x 被重构吗?
我正在生成具体实现复印机的接口。后面的步骤是确定我是否可以根据请求的复制类型(直接复制、尝试或 try-catch-addToValidationDictionary)轻松添加不同的行为。这是我需要/正在处理的主要问题是 try-catch-addToValidationDictionary。如果复制语句本身(result.AssetTag = asset.AssetTag
)能够以列表形式为不需要 try/catch/validation 功能的另一个消费者重用,那就太好了。
一般形式是这样的:
public static AssetService
{
public static ModelAsset CreateAssetDomain(IAmAnAsset asset, IValidationDictionary validationDictionary)
{
var result=new ModelAsset();
var hasExceptions=false;
try
{
result.AssetTag = asset.AssetTag;
}
catch (System.Exception exception)
{
validationDictionary.AddError(Member.Name<IAmAnAsset>(lIAmAnAsset => lIAmAnAsset.AssetTag), exception.Message);
hasExceptions = true;
}
try
{
result.LocationIdentifer = asset.LocationIdentifer;
}
catch (System.Exception exception)
{
validationDictionary.AddError(Member.Name<IAmAnAsset>(lIAmAnAsset => lIAmAnAsset.LocationIdentifer), exception.Message);
hasExceptions = true;
}
...
if (hasExceptions)
throw new ArgumentException("Failed validation");
return result;
}
}
我试图用 lambda 来分解一些重复,但来自 这篇帖子似乎只需要一个Expression
并且我不确定您将如何使用表达式>超载。
一次尝试如下:
Action<Action, Expression<Func<IAmAnAsset, object>>> CopyActions = (copyAction, expression) =>
{
try
{
copyAction();
}
catch (Exception exception)
{
validationDictionary.AddError(Member.Name<IAmAnAsset>(expression), exception.Message);
hasExceptions = true;
}
};
var copyActions = new Dictionary<string,Action>()
{
Member.Name<IAmAnAsset>(z=>z.AddedBy),()=>result.AddedBy=asset.AddedBy},
Member.Name<IAmAnAsset>(z=>z.AssetTag),()=>result.AssetTag=asset.AssetTag},
...
}
foreach (var item in copyActions)
{
tryCopyAction(item.Value, item.Key);
}
if (hasExceptions)
throw new ArgumentException("Failed validation");
return result;
我希望有一种解决方案可以减少固有的重复
Member.Name
满足以下任何条件:
- 每行上有 2 个位置需要 IAmAnAsset.AddedBy
- 同一行上需要 .AddedBy 3 次
Member.Name
在每行上- 是否可以使用此表达式来检索字符串名称或评估它的值?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
一个简单的函数怎么样?
How about a simple function?