2012-08-09 54 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>();