C# 调用方法时是否可以防止对参数进行隐式强制转换?

C# 调用方法时是否可以防止对参数进行隐式强制转换?,c#,implicit-conversion,unsafe,C#,Implicit Conversion,Unsafe,我正试图清理一些我继承的代码,我想知道在C#中是否有办法防止方法参数的隐式强制转换。我们有一系列重载方法,它们接受各种参数,但是如果传入参数被强制转换为与该方法使用的类型不同的类型(因此重载),则会得到意外/错误的结果 比如说这个, private unsafe void MyMethod(float arg0, float arg1) { /* Do Very Unsafe Things */ } 会被这个叫 int i = 0; int j = 1; MyMethod(i, j);

我正试图清理一些我继承的代码,我想知道在C#中是否有办法防止方法参数的隐式强制转换。我们有一系列重载方法,它们接受各种参数,但是如果传入参数被强制转换为与该方法使用的类型不同的类型(因此重载),则会得到意外/错误的结果

比如说这个,

private unsafe void MyMethod(float arg0, float arg1)
{
  /* Do Very Unsafe Things */
}
会被这个叫

int i = 0;
int j = 1;
MyMethod(i, j);
如果我没有要执行的特定重载
(int,int)


我想在编译时找到一些方法来确保我们必须编写
(int,int)
版本的方法来这样调用它,而不是使用隐式转换让编译器“帮助”。这可能吗?

我不知道有什么内置工具,但Roslyn analyzer或diagnoster会让这成为可能。这是一个很好的观点。也许我应该考虑设置一个签入策略或其他工具,以防止我们在没有明确编写所需的
MyMethod
版本的情况下签入。您可以尝试创建一个类来代替float,并为每种类型定义隐式强制转换。