参数类型不符合CLS,为什么?

我得到这样的警告 替代文字 如果您知道它是什么,请解释并帮助我摆脱它。 南。

在AssemblyInfo.cs文件中,您可能有一行读取

[assembly:CLSCompliant(true)] 

如果这样做,则必须满足以下规则。 (来自http://www.devarticles.com/c/a/C-Sharp/Making-Your-Code-CLS-Compliant/的 Copy-Pasta)

  1. 无符号类型不应该是该类的公共接口的一部分。 这意味着公共字段不应该有uint或ulong等无符号类型,公共方法不应该返回无符号类型,传递给公共函数的参数不应该有无符号类型。 但是,无符号类型可以是私有成员的一部分。

  2. 指针等不安全类型不应与公共成员一起使用。 但是,它们可以与私人成员一起使用。

  3. 类名和成员名不应仅根据具体情况而有所不同。 例如,我们不能有两个名为MyMethod和MYMETHOD的方法。

  4. 只有属性和方法可能会重载,操作符不应该重载。

这是一个古老的问题,但我认为未来的调查人员(比如我自己)会有更好的解释。

首先,其他答案中的链接提供了给出此警告的原因的详细信息。

但是,总而言之,如果可以与为CLR设计的其他语言进行交互,则为公共语言运行时编写的代码(例如C#)是符合CLS的。 这意味着某些特定于该语言的数据类型不是整个运行时通用的,这些数据类型不符合要求。 关于变量和方法的快速简便的解决方法是为它们提供internal的可见性修饰符,它指定方法,类,属性等在构建它的程序集之外是不可见的。 这应该仅针对那些您不需要或不想在assembly体外使用的物品进行; 对于那些您想要可见的数据,请使用符合CLS的数据类型。

更多信息:

  • 编写符合CLS的代码

并且您可以在符合CLS的程序集中获取这些警告,该程序集引用非CLS兼容程序集(并公开其非CLS兼容成员):

  • 包含非CLS兼容参考的程序集是否可以符合CLS?