是否可以以更通用的方式编写此lambda?它工作正常,但看起来太具体了;不会触及IEnumerable
的内容,但应在返回类型中保留。
static readonly Func<
(IEnumerable<string>, IEnumerable<string>),
(IEnumerable<string>, IEnumerable<string>),
(IEnumerable<string>, IEnumerable<string>)
> JoinListTuples = (a, b) =>
(a.Item1.Concat(b.Item1),
b.Item2.Concat(b.Item2));
我在考虑这样的事情,但它没有编译:
static readonly Func<
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>)
> JoinListTuples = (a, b) =>
(a.Item1.Concat(b.Item1),
b.Item2.Concat(b.Item2));
答案 0 :(得分:4)
类型可以是通用的,方法可以是通用的,但字段不能是通用的。
当您确实需要将此通常作为委托类型时,解决方法是使其成为泛型类的字段:
public static class HelperClass<T, U> {
public static readonly Func<
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>)
> JoinListTuples = (a, b) =>
(a.Item1.Concat(b.Item1),
b.Item2.Concat(b.Item2));
}
但是对于大多数用途来说,将其转换为方法就足够了。 也许是这样的:
static (IEnumerable<T>, IEnumerable<U>) JoinListTuples<T, U>(
(IEnumerable<T>, IEnumerable<U>) a,
(IEnumerable<T>, IEnumerable<U>) b)
{
return (a.Item1.Concat(b.Item1),
b.Item2.Concat(b.Item2));
}
答案 1 :(得分:2)
我不确定这是否会对你有所帮助
然而,这样的事情可能
public class SomeHelper<T,U>
{
public static readonly Func<
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>),
(IEnumerable<T>, IEnumerable<U>)>
JoinListTuples = (a, b) =>
(a.Item1.Concat(b.Item1),b.Item2.Concat(b.Item2));
}
注意,未经测试且不在VS前面