C# 仅在方法中传递枚举值
我有一个名为SemverPartOption的枚举,它具有以下值:C# 仅在方法中传递枚举值,c#,asp.net,methods,enums,parameter-passing,C#,Asp.net,Methods,Enums,Parameter Passing,我有一个名为SemverPartOption的枚举,它具有以下值: public enum SemverPartOption { Full, Version, Major, Minor, Patch, Micro, Pre, Meta } 然后我有一个方法,它使用这个枚举作为参数: public static string SemverPart(SemverPartOption? Option = SemverPartOption
public enum SemverPartOption
{
Full,
Version,
Major,
Minor,
Patch,
Micro,
Pre,
Meta
}
然后我有一个方法,它使用这个枚举作为参数:
public static string SemverPart(SemverPartOption? Option = SemverPartOption.Full)
枚举和方法都位于AppName.Helpers
命名空间和AppInfo
类中。我正在尝试调用该方法并只传递枚举值。例如:
我要做的是:
Helpers.AppInfo.SemverPart(Helpers.AppInfo.SemverPartOption.Major);
我可以接受的是:
Helpers.AppInfo.SemverPart(Major);
最理想:
SemverPart(Major);
有没有一种方法可以做到这一点而不必经常使用using
语句
为了清楚起见,我不想使用
using
语句,因为我想在属于不同控制器类的几个Razor视图中调用此方法。否,您必须添加using
语句
这不应该是个问题;您的IDE将允许您在键入Major
时只导入它,而不必手动添加它
如果您有另一个具有相同名称的枚举/类(Major
),则它将运行,但您可以通过添加更多信息(如SemverPartOption.Major
,或无论您需要增加多少),或使用
要将此枚举导入每个razor视图,请转到/views/Web.config文件并添加(或调整)以下XML:
如果提供了附加信息(关于在razor页面中使用的信息),您可以使用
~/Views/web.config
文件向razor添加“using”。节点如下所示:
<configuration>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Web" />
<add namespace="AppName.Helpers.AppInfo" /> <!-- new addition -->
</namespaces>
</pages>
</system.web.webPages.razor>
</configuration>
这是使用AppName.Helpers.AppInfo将
添加到代码文件的传真,但特别适用于@Razor页面。是否存在命名冲突?e、 g.其他(已包含)名称空间是否具有与需要完全限定名称的名称匹配的方法/枚举?否enum和方法是应用程序中唯一的此类名称。我认为如果不使用SemverPartOption,您无法直接使用Major
。Major
有,我可以手动将其放入,问题是我希望能够在多个Razor视图中调用此方法,而不是所有视图都位于同一个控制器类中。这不能放在某个全局命名空间中吗?@aaronmallen:您可以在views/Web.config文件中使用
语句添加“全局”,这样就不必在每个视图中都显式定义它。这就是您想要的吗?所以在类之外定义枚举。是的,您将无法绕过它。我相信在Java中,编译器会将枚举转换为类中的公共静态字段;不能仅指定为字段的内容。假设C#在幕后也做了同样的事情,那么您也必须始终指定类型。请参阅对Jeroen Vannevel答案的评论以及对问题的编辑。