我有以下课程,但我似乎无法用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
。
答案 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