如何解决长?”真的是一个结构吗?
通过定义Nullable 是一个结构,但是当我调用某个泛型函数时,它的行为就像是一个对象。
class GenController
{
public void Get<T>(T id) where T : struct
{
Console.Write("is struct");
}
public void Get(object obj)
{
Console.Write("is object");
}
}
long param1 = 1234;
new GenController().Get(param1);
// output is "is struct" as expected
long? param2 = 1234;
new GenController().Get(param2);
// output is "is object"
// obj seen at debug time as "object {long}"
// expected "is struct"
因此,该参数被视为对象而不是结构。
对正在发生的事情有什么想法,我是否误解了struct
的含义?
是否可以将Nullable<T>
或T
和object
分配为不同种类的参数?
解决方法
Nullable<T>
是definitely a struct。
您的问题更多地是关于where T : struct
泛型类型约束,而不是Nullable<T>
。
来自the docs:
where T : struct
:type参数必须是不可为空的值类型。
long?
是一个可空值类型,因此where T : struct
约束不允许。
要回答这个问题:
-
Nullable<T>
是struct
-
struct
约束仅允许不可为空的结构。
这样,您可以指定该参数为可空值,例如:
public void Get<T>(T? id)
where T: struct
{
Console.Write("is nullable struct");
}
那将是另外一个重载,以捕获可为空的结构。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。