草庐IT

reinterpret_casting

全部标签

c# - 为什么 OfType<> 比 Cast<> 快?

回答以下问题:HowtoconvertMatchCollectiontostringarray给定两个Linq表达式:vararr=Regex.Matches(strText,@"\b[A-Za-z-']+\b").OfType()//OfType.Select(m=>m.Groups[0].Value).ToArray();和vararr=Regex.Matches(strText,@"\b[A-Za-z-']+\b").Cast()//Cast.Select(m=>m.Groups[0].Value).ToArray();OfType由用户Alex进行了基准测试稍微快一点(并由我自

c# - 为什么这个 Linq Cast 在使用 ToList 时会失败?

考虑这个人为的、微不足道的例子:varfoo=newbyte[]{246,127};varbar=foo.Cast();varbaz=newList();foreach(varsbinbar){baz.Add(sb);}foreach(varsbinbaz){Console.WriteLine(sb);}借助二进制补码的魔力,-10和127被打印到控制台。到目前为止,一切都很好。眼尖的人会看到我正在迭代一个可枚举并将其添加到列表中。这听起来像ToList:varfoo=newbyte[]{246,127};varbar=foo.Cast();varbaz=bar.ToList();//

c# - .Cast 优于 .Select 有什么好处?

我有一个带有隐式转换运算符到大多数基本类型的类型,并尝试使用.Cast()在这种类型的集合上,失败了。当我深入研究它时,我注意到通过as类型转换不使用隐式或显式转换,只是不会编译,所以我想这就是.Cast的地方摔倒。所以这失败了varenumerable=source.Cast();但这行得通varenumerable=source.Select(x=>(string)x);那么Cast有什么好处呢?当然,它短了几个字符,但似乎更受限制。如果可以用来转换,除了语法更紧凑之外还有什么好处吗? 最佳答案 转换用法Cast的好处|当您的收

c# - 令人费解的 Enumerable.Cast InvalidCastException

以下抛出一个InvalidCastException。IEnumerablelist=newList(){1};IEnumerablecastedList=list.Cast();Console.WriteLine(castedList.First());为什么?我使用的是VisualStudio2008SP1。 最佳答案 这很奇怪!有一篇博文here描述了Cast()的行为在.NET3.5和.NET3.5SP1之间发生了变化,但它仍然没有解释InvalidCastException,如果您这样重写代码,您甚至会得到:varlist

c# - 在 C#/VB.NET 中解码 T-SQL CAST

最近我们的网站被Asproxbotnet的卷土重来所淹没SQLinjection攻击。无需详细说明,攻击会尝试通过对T-SQL进行编码来执行SQL代码。ASCII编码的二进制字符串中的命令。它看起来像这样:DECLARE%20@S%20NVARCHAR(4000);SET%20@S=CAST(0x44004500...06F007200%20AS%20NVARCHAR(4000));EXEC(@S);--我能够用SQL对此进行解码,但我对此有点谨慎,因为我当时并不知道到底发生了什么。我试着写了一个简单的解码工具,这样我就可以在不触及SQL Server的情况下解码这种类型的文本。.我需

c# - 何时使用 Cast 或 Convert

我很想知道转换为int与使用Convert.ToInt32()之间的区别是什么。使用一个是否有某种性能提升?分别应该用于哪些情况?目前我更倾向于使用Convert但我没有理由去任何一种方式。在我看来,我看到他们都在实现相同的目标。 最佳答案 当它确实是一种int类型时转换,当它不是int但您希望它成为一种类型时转换。例如inti=(int)o;当你知道o是一个intinti=Convert.ToInt32("123")因为“123”不是int,它是int的字符串表示。 关于c#-何时使用

c# - 'is' 与 try cast with null check

我注意到Resharper建议我打开这个:if(myObj.myPropisMyType){...}进入这个:varmyObjRef=myObj.myPropasMyType;if(myObjRef!=null){...}为什么它会建议进行此更改?我习惯了Resharper建议优化更改和代码减少更改,但这感觉就像它想把我的单一语句变成两行。根据MSDN:Anisexpressionevaluatestotrueifbothofthefollowingconditionsaremet:expressionisnotnull.expressioncanbecasttotype.Thatis

C# 浮点表达式 : strange behavior when casting the result float to int

我有以下简单代码:intspeed1=(int)(6.2f*10);floattmp=6.2f*10;intspeed2=(int)tmp;speed1和speed2应该有相同的值,但事实上,我有:speed1=61speed2=62我知道我应该使用Math.Round而不是转换,但我想了解为什么值不同。我查看了生成的字节码,但除了存储和加载之外,操作码是相同的。我也在java中尝试了相同的代码,我正确地获得了62和62。谁能解释一下?编辑:在真正的代码中,它不是直接6.2f*10而是一个函数调用*一个常量。我有以下字节码:对于speed1:IL_01b3:ldloc.sV_8IL_0

c# - 何时在 Linq 中使用 Cast() 和 Oftype()

我知道从Linq中的Arraylist将类型转换为IEnumerable的两种方法,想知道在哪些情况下使用它们?例如IEnumerablesomeCollection=arrayList.OfType()或IEnumerablesomeCollection=arrayList.Cast()这两种方法有什么区别,每种情况我应该在哪里应用? 最佳答案 OfType-仅返回可以安全地转换为类型x的元素。Cast-将尝试将所有元素转换为类型x。如果其中一些不是来自此类型,您将得到InvalidCastException编辑例如:object

c++ - 在 Go 中使用 C++ : error: 'reinterpret_cast' undeclared

我正在尝试在Go中调用C++。sparkle_windows.h:#ifndefGO_WINSPARKLE_H#defineGO_WINSPARKLE_H#ifdef__cplusplus#include#include"winsparkle.h"extern"C"{#endifvoidinitWinSparkle(){win_sparkle_set_dsa_pub_pem(reinterpret_cast(QResource(":/WinSparkle/dsa_pub.pem").data()));win_sparkle_init();}#ifdef__cplusplus}#endi