KeyValuePair<string, int>
的默认值是多少
例如,我正在运行一个LINQ查询,并从中返回FirstOrDefault()
值
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
的类型
List<KeyValuePair<string, int>>
发布于 2014-01-28 19:25:30
任何类型T的默认值都是default(T)
,因此为了保证100%的理论准确性,您可以这样写
if (!mapping.Equals(default(KeyValuePair<string, int>))) {
// ...
}
由于KeyValuePair
是struct
(即值类型),因此不能将其与null
进行比较。尽管如此,将值与==
进行比较作为默认方法是错误的,因为如果用于引用类型,它通常会检查引用是否相等。
发布于 2014-01-28 19:25:37
KeyValuePair
是一个结构。因此,它是一个值类型,不能为null
,并且将使用成员的默认值进行初始化。
对于KeyValuePair<string, int>
,这将是null
字符串和int值0
。
KeyValuePair<string, int> kvp = default(KeyValuePair<string, int>);
Console.WriteLine(kvp.Key == null); // True
Console.WriteLine(kvp.Value == 0); // True
就像我使用default(T)
使用默认值初始化对象一样,您也可以使用它将结果与它进行比较,以确定它是否是默认值:
if (!mapping.Equals(default(KeyValuePair<string, int>)))
{ … }
另一种选择是,如果你不想使用默认值,那就只使用First
,并检查当没有结果值时抛出的异常。
https://stackoverflow.com/questions/21404249
复制相似问题