首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >`KeyValuePair<string、int>`的默认值是多少?

`KeyValuePair<string、int>`的默认值是多少?
EN

Stack Overflow用户
提问于 2014-01-28 19:23:00
回答 2查看 32.7K关注 0票数 30

KeyValuePair<string, int>的默认值是多少

例如,我正在运行一个LINQ查询,并从中返回FirstOrDefault()

代码语言:javascript
复制
KeyValuePair<string, int> mapping = (from p in lstMappings
    where p.Key.Equals(dc.ColumnName, StringComparison.InvariantCultureIgnoreCase)
    select p).FirstOrDefault();

if (mapping != null)
{ 

}

如何检查mapping对象是否为空/空

(我在上面的代码Operator '!=' cannot be applied to operands of type 'System.Collections.Generic.KeyValuePair<string,int>' and '<null>'中遇到了编译时错误)

PS:lstMappings的类型

代码语言:javascript
复制
List<KeyValuePair<string, int>>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-28 19:25:30

任何类型T的默认值都是default(T),因此为了保证100%的理论准确性,您可以这样写

代码语言:javascript
复制
if (!mapping.Equals(default(KeyValuePair<string, int>))) {
    // ...
}

由于KeyValuePairstruct (即值类型),因此不能将其与null进行比较。尽管如此,将值与==进行比较作为默认方法是错误的,因为如果用于引用类型,它通常会检查引用是否相等。

票数 47
EN

Stack Overflow用户

发布于 2014-01-28 19:25:37

KeyValuePair是一个结构。因此,它是一个值类型,不能为null,并且将使用成员的默认值进行初始化。

对于KeyValuePair<string, int>,这将是null字符串和int值0

代码语言:javascript
复制
KeyValuePair<string, int> kvp = default(KeyValuePair<string, int>);
Console.WriteLine(kvp.Key == null); // True
Console.WriteLine(kvp.Value == 0); // True

就像我使用default(T)使用默认值初始化对象一样,您也可以使用它将结果与它进行比较,以确定它是否是默认值:

代码语言:javascript
复制
if (!mapping.Equals(default(KeyValuePair<string, int>)))
{ … }

另一种选择是,如果你不想使用默认值,那就只使用First,并检查当没有结果值时抛出的异常。

票数 24
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21404249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档