gpt4 book ai didi

c# - 泛型方法的可空参数类型

转载 作者:行者123 更新时间:2023-11-30 22:41:56 28 4
gpt4 key购买 nike

我正在使用介绍的枢轴方法: http://www.extensionmethod.net/Details.aspx?ID=147

我的问题是:如何使用可空类型作为第二个通用键?

public static Dictionary<TFirstKey, Dictionary<TSecondKey, TValue>> Pivot<TSource, TFirstKey, TSecondKey, TValue>(this IEnumerable<TSource> source, Func<TSource, TFirstKey> firstKeySelector, Func<TSource, TSecondKey> secondKeySelector, Func<IEnumerable<TSource>, TValue> aggregate) {
var retVal = new Dictionary<TFirstKey, Dictionary<TSecondKey, TValue>>();

var l = source.ToLookup(firstKeySelector);
//l.Dump("Lookup first key");
foreach (var item in l) {
var dict = new Dictionary<TSecondKey, TValue>();
retVal.Add(item.Key, dict);
var subdict = item.ToLookup(secondKeySelector);
foreach (var subitem in subdict) {
dict.Add(subitem.Key, aggregate(subitem));
}
}

return retVal;
}

最佳答案

只要值不为空,您应该能够正常使用可为空的类型 - 但您不能使用null (或空的 Nullable<T> )作为键 - 它根本无法工作。

确保(在调用代码中)secondKeySelector 更有意义总是返回非空的东西;在 Nullable<T> 的情况下也许通过调用 x => x.Foo.Value (如果你明白我的意思)。

另一种方法是声明性地排除 Nullable<T>在这里,通过添加 where TSecondKey : struct - 但自 string是一个公共(public)键(并且是一个引用类型)这可能是一种不受欢迎的方法。

关于c# - 泛型方法的可空参数类型<T>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4656074/

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