我是一名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 :(得分: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
您可能正在运行较旧的二进制文件。修复编译错误,看看你的问题是否消失。
修复它:
确保您的类型参数匹配。选择int
或float
。或者在左侧使用var
关键字声明变量:var version = new CommonData<float>();
将与您在步骤1中选择的类型匹配的文字分配给Value
属性。如果您选择int
,请使用2
。如果您选择float
,请使用2.0f
。
答案 2 :(得分:1)
这是编译时错误。您声明了'int'
的泛型类型,但使用'float'
进行实例化
更正的行是
CommonData<float> version = new CommonData<float>();