gpt4 book ai didi

c# - Ti 和 Ti+1 的通用方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:09 26 4
gpt4 key购买 nike

我有以下使用 C# 6 的泛型类:

public class IncludeMapper<T1> {

private readonly Dictionary<String, List<LambdaExpression>> _properties = new Dictionary<String, List<LambdaExpression>>();

public IncludeMapper<T1> Add<T2, T3>(String property, Expression<Func<T1, T2>> path1, Expression<Func<T2, T3>> path2) {

if (!_properties.ContainsKey(property))
_properties.Add(property, new List<LambdaExpression> { path1, path2 });

return this;

}

public IncludeMapper<T1> Add<T2, T3, T4>(String property, Expression<Func<T1, T2>> path1, Expression<Func<T2, T3>> path2, Expression<Func<T3, T4>> path3) {

if (!_properties.ContainsKey(property))
_properties.Add(property, new List<LambdaExpression> { path1, path2, path3 });

return this;

}

}

Add 方法有几个表达式(路径),它们采用一个 Ti 和 Ti+1。

有没有办法简化我的代码?在路径 7 之前,我将需要至少 4 个这样的方法。

最佳答案

Is there a way to simplify my code?

好吧,你可以一点来简化它:

public class IncludeMapper<T1> {

private readonly Dictionary<String, List<LambdaExpression>> _properties =
new Dictionary<String, List<LambdaExpression>>();

private IncludeMapper<T1> AddImpl(
string property,
params LambdaExpression[] expressions)
{
if (!_properties.ContainsKey(property))
{
_properties.Add(property, paths.ToList());
}
return this;
}

public IncludeMapper<T1> Add<T2, T3>(
String property,
Expression<Func<T1, T2>> path1,
Expression<Func<T2, T3>> path2) =>
AddImpl(path1, path2);

public IncludeMapper<T1> Add<T2, T3, T4>(
String property,
Expression<Func<T1, T2>> path1,
Expression<Func<T2, T3>> path2,
Expression<Func<T3, T4>> path3) =>
AddImpl(path1, path2, path3);

...
}

您仍然需要为每个您想要支持的“通用元数”提供另一种方法,但至少实现是微不足道的。

当然,如果您希望能够指定多个路径,但每个路径都必须是同一类型,那很容易 - 因为那样您就可以使用 params具有单一 类型的参数。但是参数必须是一个特定的Expression<TDelegate> type 如果您希望能够使用 lambda 表达式作为参数,并且看起来您希望能够改变所涉及的类型。

关于c# - Ti 和 Ti+1 的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38220293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com