C# · 12月 30, 2021

c# – 为什么要使用隐式类型的局部变量?

当我说 public static IMyType GetGateWayManager(){ IUnityContainer _container = GetContainer(); IMyType _gateWayManager = _container.Resolve<IMyType>(); return _gateWayManager;}

它附带一个警告说使用隐含地类型局部变量.

如果我把它改成

public static IMyType GetGateWayManager(){ IUnityContainer _container = GetContainer(); var_gateWayManager = _container.Resolve<IMyType>(); return _gateWayManager;}

没事.

任何人都可以告诉我为什么VS编辑认为最好的做法是在这里使用var?

@R_419_1911@ 谁是谁的类型?

编译器?是的,一点没错.编译器使用类型来使您的程序在运行时更有可能通过确保类型匹配起来正常运行,您正在调用实际存在的方法,并传递正确类型的参数.这里,编译器正在检查您是否正在返回类型为IMyType的内容.

编辑?再次,是的.编辑器使用后台编译和类型信息来帮助您编写代码.当你打了在_container之后,它使用类型信息告诉你有一个Resolve方法和它需要什么参数.

您?没那么多.我们已经看到,编译器将确保您返回类型为IMyType的类型,那么为什么在编译器可以将其声明为该类型并将其检查到的时候呢?同样,编辑器会告诉你有关容器上的方法,所以你为什么要注意它是否是一个Unity容器或其他类型的容器,如果你已经从变量名称已经知道它是某种类型的容器,编辑它有一个Resolve方法.

对于本地人声明类型没有问题,但是ReSharper告诉你的是,编译器可以使用它,因此它是冗余的信息,并且您的代码可以使用隐式类型和良好的变量名来更清楚.例如,这个代码的目的是否比原始样本更不清楚?

public static IMyType GetGateWayManager(){ var container = GetContainer(); var gateWayManager = container.Resolve<IMyType>(); return gateWayManager;}