Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
表示常量字符串的C#类属性_C#_Asp.net - Fatal编程技术网

表示常量字符串的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");
              }
            }
   }
}