文档章节

KeyValuePair的默认值

 技术盛宴
发布于 02/20 18:30
字数 376
阅读 110
收藏 0

3 月,跳不动了?>>>

我有一个IEnumerable<KeyValuePair<T,U>> keyValueList类型的对象,我正在使用

 var getResult= keyValueList.SingleOrDefault();
 if(getResult==/*default */)
 {
 }
 else
 {
 } 

如何找不到正确的元素,如何检查getResult是否为默认值?

我无法检查它是否为null ,因为KeyValuePair是一个结构。


#1楼

if(getResult.Key.Equals(default(T)) && getResult.Value.Equals(default(U)))

#2楼

试试这个:

if (getResult.Equals(new KeyValuePair<T,U>()))

或这个:

if (getResult.Equals(default(KeyValuePair<T,U>)))

#3楼

我建议使用扩展方法更多的理解方式:

public static class KeyValuePairExtensions
{
    public static bool IsNull<T, TU>(this KeyValuePair<T, TU> pair)
    {
        return pair.Equals(new KeyValuePair<T, TU>());
    }
}

然后使用:

var countries = new Dictionary<string, string>
{
    {"cz", "prague"},
    {"de", "berlin"}
};

var country = countries.FirstOrDefault(x => x.Key == "en");

if(country.IsNull()){

}

#4楼

从C#7.1开始,您可以使用带有类型推断的default文字来简化表达式:

var getResult= keyValueList.SingleOrDefault();

if(getResult.Equals(default))
{
}
else
{
} 

#5楼

您可以创建一般(和通用)扩展方法,如下所示:

public static class Extensions
{
    public static bool IsDefault<T>(this T value) where T : struct
    {
        bool isDefault = value.Equals(default(T));

        return isDefault;
    }
}

用法:

// We have to set explicit default value '0' to avoid build error:
// Use of unassigned local variable 'intValue'
int intValue = 0;
long longValue = 12;
KeyValuePair<String, int> kvp1 = new KeyValuePair<String, int>("string", 11);
KeyValuePair<String, int> kvp2 = new KeyValuePair<String, int>();
List<KeyValuePair<String, int>> kvps = new List<KeyValuePair<String, int>> { kvp1, kvp2 };
KeyValuePair<String, int> kvp3 = kvps.FirstOrDefault(kvp => kvp.Value == 11);
KeyValuePair<String, int> kvp4 = kvps.FirstOrDefault(kvp => kvp.Value == 15);

Console.WriteLine(intValue.IsDefault()); // results 'True'
Console.WriteLine(longValue.IsDefault()); // results 'False'
Console.WriteLine(kvp1.IsDefault()); // results 'False'
Console.WriteLine(kvp2.IsDefault()); // results 'True'
Console.WriteLine(kvp3.IsDefault()); // results 'False'
Console.WriteLine(kvp4.IsDefault()); // results 'True'

本文转载自:https://stackoom.com/question/6t04/KeyValuePair的默认值

粉丝 0
博文 1550
码字总数 0
作品 0
深圳
高级程序员
私信 提问
加载中

评论(0)

Unity - HttpHelper框架类库

编者注 这几天一直在写Unity当中的C#的网络传输,但是发现由于Unity采用的mono框架,支持的仅仅是.Net Framework 3.5的API,并不支持更高级别的HttpClient,则很多功能需要手动开发。最早简单...

抢小孩糖吃
2017/10/31
186
0
KeyValuePair用法

KeyValuePair t = new KeyValuePair("Cat", new int[]{,,}); 现在要修改t的整数数组的第二个值 变成 Cat => {0,100,0} 这种的结果 怎么写?...

yak
2011/10/31
1.4K
1
控制随机抽中几率 [ C# | Random ]

一、文字解说: 为待随机抽取的集合每个项加一个权值,这个权值就是随机几率,比如正常被抽正的几率为1,那么将希望被抽中几率更大的项的权值设置为3或5,然后随机抽取集合中的项,并将随机数...

walb呀
2017/12/07
0
0
Dictionary、KeyValuePair、Hashtable的比较和使用

Dictionary 官方文档:http://msdn.microsoft.com/en-us/library/xfhwa508.aspx 而Directory是HashTable的泛型模式,用KeyValuePair来遍历Directory。 Dictionary泛型 中的任何键都必须是唯一...

蚊子888
2013/05/17
0
0
C# 7.0 新特性(1): 基于Tuple的“多”返回值方法

原文出处:Hover Zuo 本文基于Roslyn项目中的Issue:#347 展开讨论.   1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法   2. C# 7.0 新特性2: 本地方法   3. C# 7.0 新特性3: 模式匹...

Hover Zuo
2016/06/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flutter 强大的MediaQuery控件

注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 MediaQuery 通常情况下,不会直接将MediaQuery当作一个控件,而是使用MediaQuery.of获取当...

老孟程序员
23分钟前
22
0
【实战】2.如何写周报

如何写周报 一、周报的目的 以一个时间节点为准,同时做到向上汇报和向下汇报。向上汇报要做到整体项目的概况,让上级领导知道当前项目的整体状态。向下汇报要做到我们当前做了什么,紧接着的...

卖小女孩的小火柴
30分钟前
18
0
美颜重磅技术之GPUImage源码分析

说到基于GPU的图像处理和实时滤镜,大家肯定会想到鼎鼎大名的GPUImage,这个项目确实为后续开发提供了很多方便,基本的图像处理工具一应俱全。但是学习借鉴GPUImage的项目结构,可以为我们提...

码农突围
36分钟前
7
0
mapbox

Mapbox是一个可以跨行业使用的开发平台,我们可以利用它对地图进行创建和定制,以解决地图、数据和空间分析等问题。 Leaflet 轻量 WebGIS 前端类库 Leaflet 是一个为建设移动设备友好的互动地...

东东笔记
42分钟前
32
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部