C# 查找类是否使用枚举、结构、公共常量或其他内容?
我正在创建一个lookup类,以便在所有项目中使用常量值。 问题是,有几种解决方案可以创造这样的东西。我可以创建一个包含枚举、结构或常量的类,或者为每个“对象”创建一个类。我想知道什么是最好的解决办法 首先我想做这样的事情:C# 查找类是否使用枚举、结构、公共常量或其他内容?,c#,dictionary,constants,lookup,C#,Dictionary,Constants,Lookup,我正在创建一个lookup类,以便在所有项目中使用常量值。 问题是,有几种解决方案可以创造这样的东西。我可以创建一个包含枚举、结构或常量的类,或者为每个“对象”创建一个类。我想知道什么是最好的解决办法 首先我想做这样的事情: public static class Defines { public enum PAGELAYOUT_NAMES { STANDARD = "Standard" } } inte
public static class Defines
{
public enum PAGELAYOUT_NAMES
{
STANDARD = "Standard"
}
}
internal class Base<T>
{
internal T Value{ get; private set;}
internal Base(T value)
{
Value = value;
}
}
public class PageLayout
{
public static string Standard { get { return new Base<string>("Standard").Value; } }
}
但就我个人而言,我不太喜欢在枚举中使用字符串。
另一种选择是使用struct,如果您看到以下代码,它会更难看:
public static class Defines
{
public struct PAGELAYOUT_NAMES
{
public static string STANDAARD = "Standaard";
}
}
这看起来好一点,但如果有很多选项,可能会令人困惑:
public static class Defines
{
public const string PAGELAYOUT_NAMES_STANDARD = "Standard";
}
在键入此帖子时,我认为这将是最好的/干净的选择:
public static class PageLayout
{
public const string STANDARD = "Standard";
}
还有其他建议吗?
在我看来,用几个只定义一些常量的类来填充项目会带来很多开销和混乱
编辑
在原始上下文中不是很清楚,但是查找值不限于字符串。下面的一些非常好的建议只有在您只使用字符串时才有可能,但还需要支持Int、DateTime和其他类型。从这里的答案中得到了一些不错的想法,我将尝试在我当前的项目中哪一个效果最好
最终实施的解决方案
由于下面的建议,我实现了如下查找类:
public static class Defines
{
public enum PAGELAYOUT_NAMES
{
STANDARD = "Standard"
}
}
internal class Base<T>
{
internal T Value{ get; private set;}
internal Base(T value)
{
Value = value;
}
}
public class PageLayout
{
public static string Standard { get { return new Base<string>("Standard").Value; } }
}
内部类基类
{
内部T值{get;private set;}
内底(T值)
{
价值=价值;
}
}
公共类页面布局
{
公共静态字符串标准{get{返回新基(“标准”).Value;}
}
这是基于下面给出的答案。
原因是,现在我也可以将其用于非字符串和整数,这在带有描述和资源文件的枚举中是不可能的,尽管这对我来说会更干净。根据您正在执行的具体操作,您可能需要查看 您定义一个xml文件(或使用设计器来帮助您),然后将其编译成程序集(嵌入式程序集或“附属程序集”) 在解决方案资源管理器中右键单击类库下的“属性”节点,单击“打开”并转到“资源”选项卡。从这里开始很简单 设置后,很容易从代码中获取值,例如:-
String s = Resources.PageLayoutNames.Standard;
这里有一些复杂的情况,但如果不了解更多关于你的应用程序的信息,我无法给出更多建议。我想到的一个问题是,如果您正在对ASP.NET应用程序进行单元测试,则需要确保资源被嵌入而不是作为卫星部署,否则单元测试将无法工作
它们也被用于全球化,所以熟悉它们很好
编辑: 或者,在再次阅读你的问题之后,我倾向于问“你到底需要这个字符串做什么?” 你在做什么,你不能只用一个枚举
enum PageLayouts
{
Standard,
ExtraAwesome
}
如果您试图将要显示的文本映射到枚举类型,有很多方法可以实现这一点,例如
但是,您不能为DescriptionAttribute提供现成的资源密钥 人们建议不要使用公共嵌套类,因此在前面的示例中,
定义
应该是名称空间,而不是外部类。我更喜欢使用工厂样式的静态属性。但这取决于具体情况。可以使用字符串或枚举作为字段
public class PageLayout
{
private readonly string LayoutType;
private PageLayout(string layoutType)
{
LayoutType = layoutType;
}
public static Standard {get {return new PageLayout("Standard");}}
}
然后在调用代码时使用PageLayout.Standard
我总是使用
public static class PageLayout
{
public const string STANDARD = "Standard";
}
接近
然而,我确实创建了不止一个的类:当我使用大量sessionvariables时,我创建了一个(publicstatic)
我确实在soultion范围的常量和项目范围的常量之间做了区别
有时一个项目的常量(例如,您必须创建的PDF中的20个占位符)与其他项目无关,因此我将其作为项目类,但当我有解决方案范围的常量时,我会在放置字符串扩展名等的同一位置创建一个类。如果使用“const”,您需要非常小心价值观它们被编译为引用程序集的文本。这意味着如果常量值发生更改,则需要重新编译所有DLL,而不仅仅是包含更改常量的DLL。请看这里的注释:-尽管我喜欢Iain Galloway的建议的简洁性,但我已经实现了这一点,因为您还可以添加非字符串和整数值,如GUID、DateTime等。