C#类,其中一个属性可以具有两个字符串中的任意一个
如何将C#类中的属性设置为只允许包含两个字符串中的任何一个 例如,考虑这个类:C#类,其中一个属性可以具有两个字符串中的任意一个,c#,C#,如何将C#类中的属性设置为只允许包含两个字符串中的任何一个 例如,考虑这个类: class Route { private string color; } 如果我希望颜色只能是“深红色”或“浅蓝色”,我该怎么做 我尝试定义一个枚举,如下所示: public enum Color { "Dark red", "Light blue" } public class ColorString { private readonly string _value;
class Route
{
private string color;
}
如果我希望颜色只能是“深红色”或“浅蓝色”,我该怎么做
我尝试定义一个枚举,如下所示:
public enum Color
{
"Dark red",
"Light blue"
}
public class ColorString
{
private readonly string _value;
public static ColorString DarkRed = new ColorString("Dark bed");
public static ColorString LightBlue = new ColorString("Light blue");
private ColorString(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
然后使用它,而不是使用内置的string类,但它似乎不是正确的方式。“它似乎不是正确的方式”并不是用正确的词来描述您在那里所做的事情
C#中的枚举由枚举文字而不是字符串文字组成
你基本上需要的是
public enum Color
{
DarkRed,
LightBlue
}
请在此处查看C#enum的参考:
如果您的属性必须是类型String
,您可以实现枚举值和字符串之间的转换,(返回colorValue.ToString();
和colorValue=(Color)enum.Parse(typeof(Color),stringValue;
),但我建议将您的属性改为类型Color
。“这似乎不是正确的方式”不是用正确的词语来描述你在那里所做的事情
C#中的枚举由枚举文字而不是字符串文字组成
你基本上需要的是
public enum Color
{
DarkRed,
LightBlue
}
请在此处查看C#enum的参考:
如果属性的类型必须是
String
,则可以实现枚举值和字符串之间的转换(返回colorValue.ToString();
和colorValue=(Color)enum.Parse(typeof(Color),stringValue;
)但我建议您将属性改为颜色类型。使用枚举的替代方法如下:
public enum Color
{
"Dark red",
"Light blue"
}
public class ColorString
{
private readonly string _value;
public static ColorString DarkRed = new ColorString("Dark bed");
public static ColorString LightBlue = new ColorString("Light blue");
private ColorString(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
这相当于枚举,但保留字符串的值,并允许您向类型添加其他行为
如果您有雄心壮志,您甚至可以将其视为一根字符串:
public static implicit operator string(ColorString colorString)
{
return colorString.ToString();
}
尽管这应该谨慎对待
如果必须是字符串,则可以通过属性setter在设置值时添加运行时检查。类似于:
public class Route
{
private string _color;
private readonly ISet<string> _validColors
= new HashSet<string> {"Dark red", "Light blue"};
public string Color
{
get { return _color; }
set
{
if (_validColors.Contains(value))
_color = value;
else
throw new ArgumentException("Invalid color");
}
}
}
公共类路由
{
私有字符串(颜色),;
专用只读ISet\u有效颜色
=新哈希集{“深红色”、“浅蓝色”};
公共字符串颜色
{
获取{return\u color;}
设置
{
如果(_validColors.Contains(value))
_颜色=值;
其他的
抛出新的ArgumentException(“无效颜色”);
}
}
}
但是,这不会阻止直接在\u color
上设置值。使用枚举的替代方法可能如下所示:
public enum Color
{
"Dark red",
"Light blue"
}
public class ColorString
{
private readonly string _value;
public static ColorString DarkRed = new ColorString("Dark bed");
public static ColorString LightBlue = new ColorString("Light blue");
private ColorString(string value)
{
_value = value;
}
public override string ToString()
{
return _value;
}
}
这相当于枚举,但保留字符串的值,并允许您向类型添加其他行为
如果您有雄心壮志,您甚至可以将其视为一根字符串:
public static implicit operator string(ColorString colorString)
{
return colorString.ToString();
}
尽管这应该谨慎对待
如果必须是字符串,则可以通过属性setter在设置值时添加运行时检查。类似于:
public class Route
{
private string _color;
private readonly ISet<string> _validColors
= new HashSet<string> {"Dark red", "Light blue"};
public string Color
{
get { return _color; }
set
{
if (_validColors.Contains(value))
_color = value;
else
throw new ArgumentException("Invalid color");
}
}
}
公共类路由
{
私有字符串(颜色),;
专用只读ISet\u有效颜色
=新哈希集{“深红色”、“浅蓝色”};
公共字符串颜色
{
获取{return\u color;}
设置
{
如果(_validColors.Contains(value))
_颜色=值;
其他的
抛出新的ArgumentException(“无效颜色”);
}
}
}
但这不会阻止直接在\u color
上设置值。属性具有getter和setter。如果您需要将属性限制为特定值,则可以使用枚举:
class Route
{
private Color Color { get; set; }
}
public enum Color
{
DarkRed,
LightBlue
}
如果必须将其限制为2个字符串值:
class Route
{
private string _color;
public string Color
{
get
{
return _color;
}
set
{
switch (value)
{
case "First Valid Value":
case "Second Valid Value":
_color = value;
break;
default:
throw new ArgumentException("Invalid Value specified");
}
}
}
}
属性具有getter和setter。如果您的要求是将属性限制为特定值,则可以使用枚举:
class Route
{
private Color Color { get; set; }
}
public enum Color
{
DarkRed,
LightBlue
}
如果必须将其限制为2个字符串值:
class Route
{
private string _color;
public string Color
{
get
{
return _color;
}
set
{
switch (value)
{
case "First Valid Value":
case "Second Valid Value":
_color = value;
break;
default:
throw new ArgumentException("Invalid Value specified");
}
}
}
}
但它似乎不是正确的方式。
是什么让你这么想的?Enum很好。但它似乎不是正确的方式。
是什么让你这么想的?Enum很好。你可以将它与字符串表示的每个枚举值上的描述属性
相结合。你可以将它与描述属性
相结合字符串表示的每个枚举值上的属性。