【发布时间】:2026-02-18 02:15:02
【问题描述】:
我有下一个代码:
class GenericStruct<T> where T : struct
{
public void M()
{
T temp1;
T temp2;
string s = temp1.ToString();
Type t = temp1.GetType();
bool b = temp1.Equals(temp2);
}
}
调用方法时出现两个错误“使用未分配的局部变量”:ToString 和 Equals,但 GetType 没问题。 “打扰”我是事实,是
where T : struct
但是,如果我写了:
struct NotGenericStruct
{
public void M()
{
NotGenericStruct temp1;
NotGenericStruct temp2;
string s = temp1.ToString();
Type t = temp1.GetType();
bool b = temp1.Equals(temp2);
}
}
没问题,编译时没有错误。 我明白了,struct 数据类型有默认构造函数并且所有成员都被初始化,所以不需要写显式的 new。
两种代码之间到底有什么区别?请解释一下我的不理解
谢谢
【问题讨论】:
-
使用 default(T) 来初始化你的变量
-
@Groo 我不确定它是否重复。如果我理解正确,问题是“有什么区别”而不是“如何解决”。
-
我同意这不应该真的被关闭。问题是为什么编译器允许在第二个示例中使用未分配的局部变量,当它是一个显式结构时,而不是在第一个示例中,当它是一个隐式结构时。
-
答案似乎是,如果结构没有字段,则不需要初始化。
-
@Chris:是的,你是对的,你应该发布答案,我重新打开了这个问题。后一个示例没有失败的原因是
NotGenericStruct没有字段,对于通用T : struct无法保证。