C#字典扩展方法语法

问题描述 投票:0回答:2

我正在尝试为字典编写扩展方法以缩短TryGetValue语法。

这是扩展名,在常规方法中是完全相同的逻辑。

private static List<T> TryGet<T>(this Dictionary<int, List<T>> dict, int key) 
{
    return dict.TryGetValue(key, out var output) ? output : new List<T>();
}

private static List<T> TryGet<T>(Dictionary<int, List<T>> dict, int key) 
{
    return dict.TryGetValue(key, out var output) ? output : new List<T>();
}

var works = TryGet(MyDict, MyInt);
var doesntWork = MyDict.TryGet...

该代码根本找不到扩展名。我确保字典是相同的并且是正确的类型。

我将扩展代码与其他可用扩展名存储在文件中,所以这也不是问题。

c# dictionary extension-methods
2个回答
1
投票

扩展方法需要可以被调用方法访问,并且应该在static class中定义。在OP中,很可能是在非静态类中定义的]

public static class Extensions
{
public static List<T> TryGet<T>(this Dictionary<int, List<T>> dict, int key) {
    return dict.TryGetValue(key, out var output) ? output : new List<T>();
 }
 }

1
投票

扩展方法必须可由调用者在静态类中访问。

public static class Extensions
{
    public static List<T> TryGet<T>(this Dictionary<int, List<T>> dict, int key) {
        return dict.TryGetValue(key, out var output) ? output : new List<T>();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.