为什么ExpandoObject无法将Guid转换为字符串?

德语

如果您传递两个字符串,我有一段代码可以正常工作。由于某些原因,如果您将GUID转换为字符串,则无法正常工作。

更详细地讲,如果我创建一个新的ExpandoObject并传递字符串值,它将起作用,但是如果我将GUID转换为字符串,则不会。

下面的代码应比较两个参数。在我的示例中,我传递了相同的两个字符串。使用Equal运算符,true如果字符串相同,则应返回如果第二个参数GUID转换为字符串,则返回的false字符串也相同。dynamicObj.Add(memberName, Guid.Parse(value).ToString());

不知道我在想什么。这是我的代码。

 string value = "642188c7-8e10-e111-961b-0ee1388ccc3b";

 string memberName = "State";
 string contactValue = value;

 var dynamicObj = (IDictionary<string, object>)new ExpandoObject();   dynamicObj.Add(memberName, Guid.Parse(value).ToString());

 var expression = Expression.Parameter(typeof(object), "arg");
 var binder = Binder.GetMember(CSharpBinderFlags.None, memberName, null, new[] { CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null) });

 var property = Expression.Dynamic(binder, typeof(object), expression);

 var isValid = false;
 var right = Expression.Constant(contactValue);
 var result = Expression.MakeBinary(ExpressionType.Equal, property, right);
 var func = typeof(Func<,>).MakeGenericType(dynamicObj.GetType(), typeof(bool));
 var expr = Expression.Lambda(func, result, expression).Compile();

 isValid = (bool)expr.DynamicInvoke(dynamicObj);
杰罗恩·范内维尔

GUID解析将以与仅使用字符串文字相同的字符串(值)结束。

但是,区别在于它在字典中的存储方式:类型Dictionary<string, object>这意味着将使用Object该类的==运算符进行引用相等性检查。String类,但是,这样做的值相等检查重载这一点。

这就是为什么它返回true的原因:

Console.WriteLine(value == Guid.Parse(value).ToString());

虽然返回false:

Console.WriteLine((object) value == (object) Guid.Parse(value).ToString());

由于字符串是不可变的,因此Guid.Parse(value).ToString()将创建一个新string对象,并与进行比较contactValue(与相同value),以进行引用相等性检查false从未使用过value所有返回相比,这显然会返回,true因为您从未创建新对象。

为了使它起作用,您可以将动态操作数转换为a,string这样它将使用正确的重载:

var castDyn = Expression.Convert(property, typeof(string));
var result = Expression.MakeBinary(ExpressionType.Equal, castDyn, right);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Json Deseralizer无法将字符串转换为guid

来自分类Dev

为什么字符串无法从Javascript转换为PHP?

来自分类Dev

为什么在Go中无法将[Size] byte转换为字符串?

来自分类Dev

为什么此Golang代码无法将字符串转换为整数?

来自分类Dev

为什么将C ++字符串转换为int?

来自分类Dev

将Javascript字符串转换为Guid

来自分类Dev

将GUID转换为字符串实体框架

来自分类Dev

如何将字符串转换为Guid?

来自分类Dev

将guid字节转换为javascript中的字符串

来自分类Dev

将字符串集合转换为GUID集合

来自分类Dev

将guid转换为sas put语句的字符串

来自分类Dev

为什么将字符串转换为字符串?

来自分类Dev

为什么将null字符串强制转换为“ null”字符串

来自分类Dev

在对字符串进行操作时,为什么将字符串转换为charArray?

来自分类Dev

为什么这个Android应用程序无法将Firebase中的文本转换为字符串?

来自分类Dev

如何将List <ExpandoObject>转换为XML字符串

来自分类Dev

无法将字符/字符串转换为int

来自分类Dev

为什么将字符串总和转换为浮点数

来自分类Dev

为什么javascript / typescript隐式将日期对象转换为字符串?

来自分类Dev

为什么有角度的$ http将datetime字符串转换为unix时间戳?

来自分类Dev

为什么将字符串转换为数字时要减去“ 0”?

来自分类Dev

为什么JS中+ str比str * 1更好,可以将字符串转换为数字?

来自分类Dev

将字符串保存到文件后,为什么\ r \ n会转换为\ n?

来自分类Dev

Swagger Codegen为什么将ON / OFF字符串枚举转换为TRUE / FALSE?

来自分类Dev

为什么在此代码中使用log base 10将int转换为字符串?

来自分类Dev

为什么将动作参数转换为ASP Net Core中的查询字符串

来自分类Dev

为什么打字稿将数字转换为字符串?

来自分类Dev

为什么允许将字符串类型转换为字节片?

来自分类Dev

为什么将字符串路径转换为Geometry并再次返回会引发FormatException?

Related 相关文章

  1. 1

    Json Deseralizer无法将字符串转换为guid

  2. 2

    为什么字符串无法从Javascript转换为PHP?

  3. 3

    为什么在Go中无法将[Size] byte转换为字符串?

  4. 4

    为什么此Golang代码无法将字符串转换为整数?

  5. 5

    为什么将C ++字符串转换为int?

  6. 6

    将Javascript字符串转换为Guid

  7. 7

    将GUID转换为字符串实体框架

  8. 8

    如何将字符串转换为Guid?

  9. 9

    将guid字节转换为javascript中的字符串

  10. 10

    将字符串集合转换为GUID集合

  11. 11

    将guid转换为sas put语句的字符串

  12. 12

    为什么将字符串转换为字符串?

  13. 13

    为什么将null字符串强制转换为“ null”字符串

  14. 14

    在对字符串进行操作时,为什么将字符串转换为charArray?

  15. 15

    为什么这个Android应用程序无法将Firebase中的文本转换为字符串?

  16. 16

    如何将List <ExpandoObject>转换为XML字符串

  17. 17

    无法将字符/字符串转换为int

  18. 18

    为什么将字符串总和转换为浮点数

  19. 19

    为什么javascript / typescript隐式将日期对象转换为字符串?

  20. 20

    为什么有角度的$ http将datetime字符串转换为unix时间戳?

  21. 21

    为什么将字符串转换为数字时要减去“ 0”?

  22. 22

    为什么JS中+ str比str * 1更好,可以将字符串转换为数字?

  23. 23

    将字符串保存到文件后,为什么\ r \ n会转换为\ n?

  24. 24

    Swagger Codegen为什么将ON / OFF字符串枚举转换为TRUE / FALSE?

  25. 25

    为什么在此代码中使用log base 10将int转换为字符串?

  26. 26

    为什么将动作参数转换为ASP Net Core中的查询字符串

  27. 27

    为什么打字稿将数字转换为字符串?

  28. 28

    为什么允许将字符串类型转换为字节片?

  29. 29

    为什么将字符串路径转换为Geometry并再次返回会引发FormatException?

热门标签

归档