表示常量字符串的C#类属性
考虑以下代码:表示常量字符串的C#类属性,c#,asp.net,C#,Asp.net,考虑以下代码: 公共静态类预定义字符串 { public const string Golf=“Golfing”; public const string Basketball=“Basketball”; 公共常量字符串hoolahops=“hulahops”; } 公共体育课 { 公共字符串名称{get;set;} } 如何强制Sports类的Name属性仅使用其中一个PredifinedString 编辑:我希望避免使用枚举,因为值始终表示字符串 我建议改用枚举: public enum
公共静态类预定义字符串
{
public const string Golf=“Golfing”;
public const string Basketball=“Basketball”;
公共常量字符串hoolahops=“hulahops”;
}
公共体育课
{
公共字符串名称{get;set;}
}
如何强制Sports类的Name属性仅使用其中一个PredifinedString
编辑:我希望避免使用枚举,因为值始终表示字符串 我建议改用
枚举
:
public enum SportName { Golfing, Basketball };
public class Sports
{
public SportName Name { get; set; }
}
典型的任务是
var s = new Sports();
s.Name = SportName.Basketball;
即使这样,它也没有强制执行,因为您仍然可以执行Name=(SportName)42代码>但是出错要困难得多-但是您当然可以将自定义逻辑放入setter以过滤掉这些无效值
另外,如果您需要枚举值的字符串表示形式,只需在其上使用ToString()
。或者您可以创建Sports类的实例,并且由于另一个类是静态的,因此可以使用其完全限定的类名访问其成员
Sports newSport = new Sports();
newSport.Name = PredefinedStrings.Basketball;
就我个人而言,我建议使用枚举,但由于您询问如何访问静态类中的常量,我举了一个快速而肮脏的方法作为示例:)尝试以下方法:
public class Sports
{
private string _name;
public string Name
{
get { return _name; }
set { if (value == PredefinedStrings.Golf
|| value == PredefinedStrings.Basketball
|| value == PredefinedStrings.Hulahoops)
{
_name = value;
}
else
{
throw new ArgumentException ("Invalid value");
}
}
}
}
这是一个简单、天真的解决方案。一些调整包括创建自己的类(SportName
,例如),并使用该类而不是string
,并在类中包装此逻辑。此外,不必手动列出if()子句中的所有常量,您可以使用一个字符串数组并检查值是否包含在其中
还有很多其他的方法 我应该指定,我希望避免使用枚举,因为我要寻找的是字符串表示,而不是整数值。不过,这是实现语法,我只想知道我是否可以用const字符串来实现。我已经尝试过在枚举上使用描述属性,但这感觉根本不正确,因为该值只是一个静态字符串。@Victor:那么您必须进行运行时检查,以确保该值在一组字符串中,并抛出一个异常。否则,继承就无法做到这一点?枚举示例的问题是,我需要枚举的字符串值,而不是枚举类型作为类的属性。您可以只返回SportName.Basketball.ToString()
,或者在属性大小写中返回Name.ToString()
Sports newSport = new Sports();
newSport.Name = PredefinedStrings.Basketball;
public class Sports
{
private string _name;
public string Name
{
get { return _name; }
set { if (value == PredefinedStrings.Golf
|| value == PredefinedStrings.Basketball
|| value == PredefinedStrings.Hulahoops)
{
_name = value;
}
else
{
throw new ArgumentException ("Invalid value");
}
}
}
}