C# 如何将单个属性更改为值字典?

C# 如何将单个属性更改为值字典?,c#,lazy-loading,C#,Lazy Loading,我有这个财产: private static Lazy<TimeLimiter> rateLimiter = new Lazy<TimeLimiter>(() => TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval)); public static TimeLimiter RateLimiter => rateLimiter.Value; private static Lazy rate

我有这个财产:

private static Lazy<TimeLimiter> rateLimiter = new Lazy<TimeLimiter>(() =>
    TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval));
public static TimeLimiter RateLimiter => rateLimiter.Value;
private static Lazy rateLimiter=new Lazy(()=>
TimeLimiter.GetFromMaxCountByInterval(MaxCount,Interval));
公共静态TimeLimiter RateLimiter=>RateLimiter.Value;
当我第一次访问它时,它会被初始化

问题是,我不想为不同的客户机提供多个实例,如
RateLimiter1
RateLimiter2
,而是想改变它,使其适用于多个客户机。可能使用带有字符串键的
字典,如
client1
client2

但我不知道如何准确初始化上面第一行中字典中的每个键。有什么建议吗?谢谢

(很抱歉标题,想不出更好的描述:)

像这样的吗

private static Dictionary<string, Lazy<TimeLimiter>> rateLimiters = new Dictionary<string, Lazy<TimeLimiter>>();

public static TimeLimiter GetRateLimiterForClient(string clientId)
{
    if (!rateLimiters.ContainsKey(clientId))
    {
        rateLimiters.Add(clientId, 
            new Lazy<TimeLimiter>(() => 
                TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval)));
    }
    return rateLimiters[clientId].Value;
}
private static Dictionary rateLimiters=new Dictionary();
公共静态TimeLimiter GetRateLimiterForClient(字符串clientId)
{
如果(!rateLimiters.ContainsKey(clientId))
{
rateLimiters.Add(clientId,
新懒惰(()=>
TimeLimiter.GetFromMaxCountByInterval(MaxCount,Interval));
}
返回率限制器[clientId]。值;
}
像这样的东西

private static Dictionary<string, Lazy<TimeLimiter>> rateLimiters = new Dictionary<string, Lazy<TimeLimiter>>();

public static TimeLimiter GetRateLimiterForClient(string clientId)
{
    if (!rateLimiters.ContainsKey(clientId))
    {
        rateLimiters.Add(clientId, 
            new Lazy<TimeLimiter>(() => 
                TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval)));
    }
    return rateLimiters[clientId].Value;
}
private static Dictionary rateLimiters=new Dictionary();
公共静态TimeLimiter GetRateLimiterForClient(字符串clientId)
{
如果(!rateLimiters.ContainsKey(clientId))
{
rateLimiters.Add(clientId,
新懒惰(()=>
TimeLimiter.GetFromMaxCountByInterval(MaxCount,Interval));
}
返回率限制器[clientId]。值;
}
线程安全解决方案(如果由多个客户端使用,通常是必需的)看起来像:

private static ConcurrentDictionary<string, Lazy<TimeLimiter>> ratelimiters = new ConcurrentDictionary<string, Lazy<TimeLimiter>>();

public static TimeLimiter GetRateLimiterForClient(string clientId)
{
    return ratelimiters.GetOrAdd(clientId, c => 
            new Lazy<TimeLimiter>(() =>
                TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval)))
                .Value;
}
私有静态ConcurrentDictionary ratelimiters=new ConcurrentDictionary();
公共静态TimeLimiter GetRateLimiterForClient(字符串clientId)
{
returnratelimiters.GetOrAdd(clientId,c=>
新懒惰(()=>
TimeLimiter.GetFromMaxCountByInterval(MaxCount,Interval)))
价值
}
ConcurrentDictionary
GetOrAdd
将返回现有的
Lazy
(如果存在),或者
在必要时添加一个新的
.Value
然后将从该
惰性
中获取
时间限制项
,线程安全解决方案(如果由多个客户端使用,通常是必需的)将如下所示:

private static ConcurrentDictionary<string, Lazy<TimeLimiter>> ratelimiters = new ConcurrentDictionary<string, Lazy<TimeLimiter>>();

public static TimeLimiter GetRateLimiterForClient(string clientId)
{
    return ratelimiters.GetOrAdd(clientId, c => 
            new Lazy<TimeLimiter>(() =>
                TimeLimiter.GetFromMaxCountByInterval(MaxCount, Interval)))
                .Value;
}
私有静态ConcurrentDictionary ratelimiters=new ConcurrentDictionary();
公共静态TimeLimiter GetRateLimiterForClient(字符串clientId)
{
returnratelimiters.GetOrAdd(clientId,c=>
新懒惰(()=>
TimeLimiter.GetFromMaxCountByInterval(MaxCount,Interval)))
价值
}

ConcurrentDictionary
GetOrAdd
将返回现有的
Lazy
(如果存在),或者
在必要时添加一个新的
.Value
将从该
Lazy

中获取
时间限制器
,那么字典到底有什么问题呢?您尝试了什么,遇到了什么困难?尝试实施一个解决方案,并在实施过程中遇到任何问题时返回给我们。询问要写什么代码不是本文的主题。为了让您开始,我希望您需要一个
字典
,如果您的客户机在代码中已知(并使用)类。否则,您将需要定义一个标识符(string,int,无所谓。让我们假设string),并最终得到一个
字典。解决这个问题的所有其他方法都可以用谷歌搜索。@Flater我知道如何定义词汇表。问题是上面的第一行代码,如何对字典中的每个项使用lazy。我卡住了there@Blendester:泛型类型是可堆叠的,例如
字典
。通常,如果您可以使用类型(例如,
Lazy
作为变量的类型,则可以将其作为泛型类型参数使用(除非您正在使用的泛型类上有任何类型要求,这超出了您的问题的范围)。请注意,可堆叠性实际上是无限的:例如,
Dictionary
作为一个随机示例。如果涉及多个线程,是的。使用。那么Dictionary到底有什么问题?您尝试了什么,遇到了什么问题?尝试实现一个解决方案,并在实现过程中遇到任何问题时返回给我们。询问要编写的代码不是本文的主题。为了让您开始,我希望您需要一个
字典
,前提是您的客户端在代码中已知(并使用)类。否则,您需要定义一个标识符(string,int,无关紧要。让我们假设string),并最终得到一本
词典
。解决这个问题的所有其他方法都可以通过谷歌搜索。@Flater我知道如何定义词典。问题是上面的第一行代码,如何对词典中的每一项使用lazy。我被卡住了there@Blendester:泛型类型是可堆叠的,例如
字典
。通常,如果可以使用类型(例如,
Lazy
作为变量的类型,您可以将其用作泛型类型参数(不包括您正在使用的泛型类的任何类型要求,这超出了您的问题的范围)。请注意,可堆叠性实际上是无限的:例如,作为随机示例,
字典
。如果涉及多个线程,则是。使用。我不打算否决投票,而是回答“要编写什么代码”问题通常是向下的磁铁。不是因为你对问题的回答是错误的,而是因为回答这样的问题是错误的。@Flater,但我认为它回答了我的问题。我需要测试它though@Blendester:“蓝精灵”是“加格默尔最恨什么?”的正确答案;但这并不意味着这个问题(或答案)应该发布到StackOverflow。正如我所说的:不是因为你对问题的回答是错误的,而是因为回答这样的问题是错误的。@Flater Man:))站在窗户前