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

Nam*_* VU 31 c#

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

Jar*_*yer 47

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

[assembly:CLSCompliant(true)]
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

  • 无符号类型可能是公共接口的一部分,如果它们没有公开任何功能,那么用没有未签名类型的语言编写的代码可能想要使用但不能这样做.例如,将一个32位无符号值存储到四个连续字节中的方法可以合法地包含"UInt32"和"Int64"的重载,并且一个类可以提供一种方法将四个连续字节转换为"UInt32",如果它也是提供一个将返回与`Int64`相同的值. (2认同)

who*_*ine 10

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

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

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


Joh*_*hnB 5

更多信息:

您可以在符合 CLS 的程序集中获得这些警告,该程序集引用了不符合 CLS 的程序集(并公开其不符合 CLS 的成员):