繁体   English   中英

如何检查传入参数是 static

[英]How can I check that incoming parameter is static

我有 class,它的构造函数采用 SemaphoreSlim 并且它必须是静态的(否则我应该抛出异常)。 如何检查传入的“信号量”参数是否为 static? 我试图查看它的类型,但没有 IsStatic 字段。 代码如下

protected CacheService(SemaphoreSlim semaphore, IMemoryCache memoryCache)
{
    _semaphore = semaphore;
    _memoryCache = memoryCache;
}

根据定义,object 绝不是“静态的”。 您在这里真正要问的是,大概是“传递的参数来自 static 字段”。 在运行时实际上没有任何方法可以回答这个问题,但这可以在自定义 Roslyn 代码分析器中进行验证。 通常,您会创建自己的[MustBeStatic]属性,将其应用于semaphore参数,并让分析器查找此属性(按全名,而不是按类型 - 仅仅是因为编译器 API 的工作方式),然后加入一些分析调用站点并检查传入表达式的逻辑。这将(必然)导致构建时警告或错误,而不是运行时异常 - 因为 Roslyn 分析器作为构建的一部分发生。

所以:这是绝对可能的(我做过非常相似的事情)。 但是,这绝对是大量的工作。 使用专门和复杂的 API(Roslyn API 功能强大但非常重要),老实说,除非你真的认为你会经常使用它,否则我认为这在代码审查和测试中会得到更好的解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM