为什么可以为 null 的 KeyValuePair<,> 没有关键财产?

发布于 2024-07-19 06:55:21 字数 389 浏览 2 评论 0 原文

我有以下内容:

KeyValuePair<string, string>? myKVP;
// code that may conditionally do something with it
string keyString = myKVP.Key;  
// throws 'System.Nullable<System.Collections.Generic.KeyValuePair<string,string>>' 
// does not contain a definition for 'Key'

我确信这是有原因的,因为我可以看到该类型可以为空。 是因为我试图在 null 可能会导致不好的事情发生时访问密钥吗?

I have the following:

KeyValuePair<string, string>? myKVP;
// code that may conditionally do something with it
string keyString = myKVP.Key;  
// throws 'System.Nullable<System.Collections.Generic.KeyValuePair<string,string>>' 
// does not contain a definition for 'Key'

I'm sure there is some reason for this as I can see that the type is nullable. Is it because I am trying to access the key when null could cause bad things to happen?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

∞觅青森が 2024-07-26 06:55:21

请尝试以下操作:

myKVP.Value.Key;

这是 System.Nullable 的精简版本:

public struct Nullable<T> where T: struct
{
    public T Value { get; }
}

由于 Value 属性的类型为 T,因此您必须使用Value 属性来获取您正在使用的包装类型实例。

编辑:我建议您在使用Value之前检查可为空类型的HasValue属性。

if (myKVP.HasValue)
{
    // use myKVP.Value in here safely
}

Try this instead:

myKVP.Value.Key;

Here is a stripped down version of System.Nullable<T>:

public struct Nullable<T> where T: struct
{
    public T Value { get; }
}

Since the Value property is of type T you must use the Value property to get at the wrapped type instance that you are working with.

Edit: I would suggest that you check the HasValue property of your nullable type prior to using the Value.

if (myKVP.HasValue)
{
    // use myKVP.Value in here safely
}
铜锣湾横着走 2024-07-26 06:55:21

这是因为可为空类型可以分配空值或实际值,因此您必须对所有可为空类型调用“.value”。 “.value”将返回基础值或抛出 System::InvalidOperationException。

您还可以对可为 null 的类型调用“.HasValue”,以确保为实际类型分配了值。

This is because nullable types can be assigned null value or the actual value, hence you have to call ".value" on all nullable types. ".value" will return the underlying value or throw a System::InvalidOperationException.

You can also call ".HasValue" on nullable type to make sure that there is value assigned to the actual type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文