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 值打印为零到控制台。我需要实现一个默认构造函数吗?我在这里想念什么?

4

3 回答 3

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仅表示“编译器:您可以看到右边的内容 - 请您为我找出变量类型”。这并不意味着“变体”或“动态”或类似的东西。

于 2012-08-09T19:32:02.810 回答
1

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

CommonData<float> version = new CommonData<float>();
于 2012-08-09T19:35:13.313 回答
1

因为您在此行有编译错误:

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

具体来说:

错误 CS0029:无法将类型隐式转换Test.CommonData<float>Test.CommonData<int>

错误 CS0031:常量值2无法转换为int

您可能正在运行较旧的二进制文件。修复编译错误,看看你的问题是否会消失。

要解决这个问题:

  1. 确保您的类型参数匹配。选择intfloatvar或者使用左侧的关键字声明变量:var version = new CommonData<float>();

  2. 将与您在步骤 1 中选择的类型匹配的文字分配给Value属性。如果您选择int,请使用2. 如果您选择float,请使用2.0f.

于 2012-08-09T19:33:32.927 回答