博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Redis中struct运用
阅读量:5255 次
发布时间:2019-06-14

本文共 1905 字,大约阅读时间需要 6 分钟。

  c#操作缓存例如redis比较推荐ServiceStack

  在redis中运用key-value存储数据,但是遇到结构体该如何处理,是类可通过get<type>(key)获得,那struct呢,

  定义结构:

1 public struct Person{2         public int id;3         public double lon;4         public double lat;5     }
View Code

  redis中设置值:

1 Random rand=new Random();2 Person info=new Person();3 for(int i=0;i<3;i++)4 {5     info.id=id+i;6     info.lon=rand.NextDouble();7     info.lat=rand.NextDouble();8     client.Set
(info.id.ToString(),info.ToString());9 }
View Code

  运行查看出现异常:

  

  为什么在使用结构体时候会出现异常,而class确可以。

  涉及到.net中对结构体与class直接区别,结构体是一种值类型非引用类型

  C#的所有值类型均隐式派生自System.ValueType:

      结构体:struct(直接派生于System.ValueType)

  难道ServiceStack只能存储不能获取struct么?

  非也,进入ServiceStack text项目:https://github.com/ServiceStack/ServiceStack.Text

  会发现如下一段内容,在项目中如何处理值类型与结构体:

C# Structs and Value TypesBecause a C# struct is a value type whose public properties are normally just convenience properties around a single scalar value, they are ignored instead the TStruct.ToString() method is used to serialize and either the static TStruct.ParseJson()/static TStruct.ParseJsv() methods or new TStruct(string) constructor will be used to deserialize the value type if it exists.

   存在TStruct.ToString()及static TStruct.ParseJson()/static TStruct.ParseJsv() 可以实现反序列化。

 可以通过重写ToString()方法及新增static ParseJson()等实现。

   修改结构体如下:

1 public struct Person{ 2         public int id; 3         public double lon; 4         public double lat; 5          6         public override string ToString() 7         { 8             return string.Format("[{0}, {1}, {2}]", id, lon, lat); 9         }10 11         public static Person Parse(string json){12             var arr=json.Trim('[',']').Split(',');13             return new Person{ id=int.Parse(arr[0]),lon=double.Parse(arr[1]),lat=double.Parse(arr[2])};14         }15     }
View Code

 之前异常部分代码:

  

   结构体是否可以转化呢?

转载于:https://www.cnblogs.com/MR520/p/4191885.html

你可能感兴趣的文章
js中的try/catch
查看>>
[导入]玫瑰丝巾!
查看>>
自动从网站上面下载文件 .NET把网站图片保存到本地
查看>>
【识记】 域名备案
查看>>
STL uva 11991
查看>>
MY SQL的下载和安装
查看>>
自定义OffMeshLink跳跃曲线
查看>>
寄Android开发Gradle你需要知道的知识
查看>>
简述spring中常有的几种advice?
查看>>
学习Redux之分析Redux核心代码分析
查看>>
ABAP 创建和调用WebService
查看>>
C# 实例化顺序
查看>>
CSS水平垂直居中总结
查看>>
委托又给我惹麻烦了————记委托链的取消注册、获取返回值
查看>>
ps怎么把白色背景变透明
查看>>
gource 安装教程
查看>>
字符串转 Boolean 的正确方式
查看>>
给你的网站404页面加上“宝贝寻亲”公益页面
查看>>
整理推荐的CSS属性书写顺序
查看>>
协程, IO阻塞模型 和 IO非阻塞模型
查看>>