从构造函数中分配返回值

时间:2014-03-27 10:08:32

标签: c#

我有以下课程,但我似乎无法用C#获得所需的结果。

public class AppOsType  {
    public static class IOS {
        public static int IOS()
        {
            return 100;
        }
        public static string ToString() 
        {
            return "iOS";
        }
    }
    ... // additional values
}   

我想得到以下结果:

AppOsType.IOS // returns 100
AppOsType.IOS.ToString() // returns "iOS"

但是当我执行以下操作时,我收到一条错误,说AppOsType.IOS是一种类型:

Assert.AreEqual(100, AppOsType.IOS);

我错过了什么?

修改:遗漏static

5 个答案:

答案 0 :(得分:2)

不确定为什么需要所有静态和内部类的东西,为什么不让它保持简单并定义枚举:

 public enum AppOsType
 {
      IOS = 100
 }

然后使用

var ios = AppOsType.IOS;
var number = (int)ios;
var name = ios.ToString();

如果您需要根据枚举返回已翻译的字符串,则可以添加字典:

 var translations = new Dictionary<AppOsType, string>()
 {
     { AppOsType.IOS, "iOs" }
 }

然后

var ios = AppOsType.IOS;
var number = (int)ios;
var name = translations[ios];

答案 1 :(得分:1)

如果你真的需要在AppOsType类中使用这个嵌套的静态类,那么你需要改变一些东西,因为一个方法不能具有同一个类的名称和constructor cannot return values。 (考虑一下这个事实,好像构造函数的返回值已被定义为类的实例)

void Main()
{
    Console.WriteLine(AppOsType.IOS.Version);
    Console.WriteLine(AppOsType.IOS.ToString());
}

public class AppOsType  
{
    // .... other members here ?? ...
    public static class IOS 
    {
        public static readonly int Version;
        static IOS()
        {
            // In the static constructor you could set the readonly
            // static property
            Version = 100;
        }
        public static string ToString() 
        {
            return "iOS";
        }
    }
} 

答案 2 :(得分:0)

因为IOS是一个班级。 AppsOsType.IOS指向静态类。如果您的方法public int IOS()是静态的,则可以使用AppOsType.IOS.IOS()

访问它

答案 3 :(得分:0)

如果由于某种原因你不想要枚举,为了使它能够使用所需的语法,你需要一个公共属性(不是ctor或方法):

public class AppOsType  {
    public static class IOS {
        public static  int IOS
        {
            get { return 100; }
        }
        public static string ToString() 
        {
            return "iOS";
        }
    }
}   

答案 4 :(得分:0)

您使用相同的名称IOS,因此请更改此

AppOsType.IOS // returns 100 [error]  
  

AppOsType.IOS.IOS // might returns 100