2012-08-09 35 views
1

我是C#初學者,正在嘗試新的一段代碼。下面的代碼不能正確打印值:如何打印通用對象的屬性

namespace systemTypes 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CommonData<string>name = new CommonData<string>(); 
      name.Value = "abcd"; 
      CommonData<float>version = new CommonData<float>(); 
      version.Value = 2.0F; 
      Console.WriteLine(
       "generic object storing string val : {0}", 
       name.Value); 
      Console.WriteLine(
       "generic object storing float val : {0}", 
       version.Value); 
     } 
    } 

    public class CommonData<T> 
    { 
     private T _data; 
     public T Value 
     { 
      get 
      { 
       return this._data; 
      } 
      set 
      { 
       this._data = value; 
      } 
     } 
    } 
} 

它打印空白的字符串值和零的int值到控制檯。我需要實現一個默認的構造函數嗎?我在這裏錯過了什麼?

+0

我可以看到一個問題,你可能有:'CommonData 版本=新CommonData ();' – 2012-08-09 19:29:51

+1

'CommonData 版本=新CommonData ();'< - 不會編譯。 – FishBasketGordo 2012-08-09 19:30:05

+1

如何編譯不應該打印值的代碼!它甚至不會開始。 – 2012-08-09 19:34:44

回答

2

編譯器會告訴你,這是錯誤的:

CommonData<int>version = new CommonData<float>(); 

爲其編譯器說:

錯誤1無法隱式轉換類型 'systemTypes.CommonData' 到 'systemTypes.CommonData' some.cs 10 39 someproject

目前它不編譯,所以你運行一些舊版本,大概有硬編碼零。您沒有運行您顯示的代碼。

工作碼本來:

CommonData<float>version = new CommonData<float>(); 

不過,也有次說太多是自找麻煩的時候; var會工作得很好第一次:

var name = new CommonData<string>(); 
name.Value = "abcd"; 
var version = new CommonData<float>(); 
version.Value = 2.0F; 
Console.WriteLine("generic object storing string val : {0}", name.Value); 
Console.WriteLine("generic object storing float val : {0}", version.Value); 

這裏,var只是意味着「編譯:你可以看到什麼是正確的 - 你找出變量類型爲我請。」這並不意味着「變體」或「動態」或類似的東西。

1

因爲你在這一行編譯錯誤:

CommonData<int>version = new CommonData<float>(); 

具體做法是:

錯誤CS0029:無法隱式轉換類型Test.CommonData<float>Test.CommonData<int>

錯誤CS0031:常數值2不能被轉換爲int

您可能正在運行較舊的二進制文件。修復編譯錯誤,看看你是否有問題不會消失。

要解決這個問題:

  1. 確保您的類型參數的匹配。選擇intfloat。或在左側的var關鍵字聲明變量:var version = new CommonData<float>();

  2. 指定在步驟1中挑到Value屬性文字匹配的類型。如果您選擇int,請使用2。如果您選擇float,請使用2.0f

1

這是編譯時錯誤。您在聲明泛型類型的'int''float' 更正行實例是

CommonData<float> version = new CommonData<float>();