表示常量字符串的C#类属性
本文关键字:属性 常量 字符串 表示 | 更新日期: 2023-09-27 18:24:56
考虑以下代码:
public static class PredefinedStrings
{
public const string Golf = "Golfing";
public const string Basketball = "Basketball";
public const string HoolaHoops = "Hulahoops";
}
public class Sports
{
public string Name { get; set; }
}
How can I force the Name property of the Sports class to use only one of the PredifinedStrings?
Edit: I want to avoid using enums since the values always represent a string.
I would suggest using an enum
instead:
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()
即可。
尝试以下操作:
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
,并将此逻辑封装在类中。此外,您可以拥有一个字符串数组,并检查其中是否包含value
,而不是手动列出if()子句中的所有常量
很多其他方式。:)
或者你可以创建一个Sports类的实例,因为另一个类是静态访问,所以它的成员可以使用它的完全限定类名
Sports newSport = new Sports();
newSport.Name = PredefinedStrings.Basketball;
就我个人而言,我建议使用枚举,但由于您询问了如何访问静态类中的常量,我发布了一个快速而肮脏的方法作为示例:)