如何创建一个扩展方法,允许我调用ToSerializableDictionary(p => p.ID)而不是.ToDictionary(p => p.ID)

cap*_*gon 2 c# extension-methods

我想创建一个扩展方法,允许我调用ToSerializableDictionary(p => p.ID)而不是.ToDictionary(p => p.ID)在下面的LINQ上下文中.虽然我不确定我应该做什么类的扩展方法来替换ToDictionary<T>.

response.attributes = (
    from granuleGroup in groups
    let granuleRow = granuleGroup.First().First()
    select new USDAttributes()
    {
        id = (int)granuleRow["id"],
        ...
        attributes =
        (
            ...
        ).ToDictionary(p => p.ID) <--** LINE IN QUESTION **
    }
).ToList();
Run Code Online (Sandbox Code Playgroud)

这里获取的SerializableDictionary类是这样的,我可以序列化我的webservice中的字典对象,以返回与JSON一起使用的哈希表.

最初我正在为IDictionary创建一个扩展方法,所以我可以这样做:...).ToDictionary(p => p.ID).ToSerializableDictionary();但这已经完全失败了,因为这是我第一次创建扩展方法而且我不知道我在做什么.

public static class CollectionExtensions
{

    public static SerializableDictionary<string, object> ToSerializableDictionary(this IDictionary<string,object> sequence)
    {

        SerializableDictionary<string, object> sDic = new SerializableDictionary<string, object>();


        foreach (var item in sequence)
        {

        }

        return sDic;

    }
}
Run Code Online (Sandbox Code Playgroud)

Lee*_*Lee 6

public static SerializableDictionary<TKey, T> ToSerializableDictionary<TKey, T>(this IEnumerable<T> seq, Func<T, TKey> keySelector)
{
    var dict = new SerializableDictionary<TKey, T>();
    foreach(T item in seq)
    {
        TKey key = keySelector(item);
        dict.Add(key, item);
    }

    return dict;
}
Run Code Online (Sandbox Code Playgroud)