如何打印通用对象的属性

时间:2012-08-09 19:27:09

标签: c# generics

我是一名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值为零。我需要实现默认构造函数吗?我在这里缺少什么?

3 个答案:

答案 0 :(得分:2)

编译器会告诉你这是错误的:

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

编译器说:

  

错误1无法将类型'systemTypes.CommonData'隐式转换为'systemTypes.CommonData'omes.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 :(得分: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

答案 2 :(得分:1)

这是编译时错误。您声明了'int'的泛型类型,但使用'float'进行实例化 更正的行是

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