什么是默认值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)
{
}
Run Code Online (Sandbox Code Playgroud)
如何检查mapping对象是否为空/空
(我在上面的代码中得到编译时错误Operator '!=' cannot be applied to operands of type 'System.Collections.Generic.KeyValuePair<string,int>' and '<null>')
PS:lstMappings属于类型
List<KeyValuePair<string, int>>
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 40
任何类型T的默认值都是default(T),因此您可以编写100%的理论精度
if (!mapping.Equals(default(KeyValuePair<string, int>))) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
既然KeyValuePair是struct(即值类型)你无法将它与之比较null.无论如何,将值与==错误进行比较是一种默认方法,因为如果在引用类型上使用它通常会检查引用相等性.
pok*_*oke 24
KeyValuePair<T, T>是一个结构.因此,它是一个值类型,不能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
Run Code Online (Sandbox Code Playgroud)
就像我以前使用default(T)默认值初始化对象一样,您也可以使用它来比较您的结果,以确定它是否是默认值:
if (!mapping.Equals(default(KeyValuePair<string, int>)))
{ … }
Run Code Online (Sandbox Code Playgroud)
另一种选择,如果您不想使用默认值,则只需使用First并检查在没有结果值时抛出的异常.
KeyValuePair<TKey, TValue> 是结构,因此是值类型,不能是 null。结构的默认值由其成员的默认值填充。在这个例子中,它将是:
新键值对(空,0)
这应该可以回答您的直接问题,但是您尝试进行比较的一种更优雅的方法是使用default关键字。
if (mapping != default(KeyValuePair<string, int>))
{
// Mapping has default value
}
Run Code Online (Sandbox Code Playgroud)
除了KeyValuePair<TKey, TValue>. 对于引用类型default将返回null,否则将返回值类型的默认值。