2014-03-27 36 views
0

我有以下類,但我似乎無法用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

+1

你最好是在這種情況下使用枚舉。或者是一個靜態字符串集合 – Marcom

+3

它是如何編譯的? 「IOS'方法應該是靜態的 –

+0

不,一個方法不能有相同的類名,並且構造函數不能返回任何東西 – Steve

回答

2

不知道爲什麼需要爲所有的靜態和內部類的東西,你爲什麼不把它簡單定義枚舉:

public enum AppOsType 
{ 
     IOS = 100 
} 

然後使用

​​

如果您需要要返回基於枚舉的翻譯字符串,可以添加一個字典:

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

然後

​​
+0

不能改變現有的實現,否則我會觸發一個主要的重構。 (我所能做的只是改變'AppOsType'就像類。 – CincauHangus

0

它因爲IOS是一類。 AppsOsType.IOS指向靜態類。如果您的方法public int IOS()將是靜態的,您可以使用AppOsType.IOS.IOS()

+0

是的,我明白了,但這不是我想要的語法。 – CincauHangus

0

如果您不想因爲某種原因使用枚舉,要使其以所需的語法工作,您需要一個公共屬性(不是ctor或method) :

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

我的現有和你的代碼也出現這個錯誤 - '' IOS':成員名稱不能與它們的封閉類型相同' – CincauHangus

+0

因爲這兩個代碼都有返回類型的構造函數:)這不是有效的代碼。你不能有返回類型的構造函數 – CarbineCoder

+0

@CincauHangus,你是對的,你可以改變類型名稱或屬性名稱嗎? – Guillaume

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"; 
     } 
    } 
} 
+0

不,沒有必要有靜態類,隨時重建類,但仍然達到與兩個預期結果相同的結果 – CincauHangus

+0

然後,如果你只有這兩個屬性,爲什麼不使它們成爲外部類的一部分?我看不出有什麼合理的理由不這樣做 – Steve

0

您正在使用相同的名稱IOS所以改變這種

AppOsType.IOS // returns 100 [error] 

(好像構造函數的返回值已經被定義爲類的實例認爲的事實)到

AppOsType.IOS.IOS // might returns 100