草庐IT

const_cast-ed

全部标签

c# - 为什么 ReSharper 更喜欢 const 而不是 readonly?

我注意到“常见做法和代码改进”下的ReSharper建议:将局部变量或字段转换为常量。我还注意到,在BillWagner的《EffectiveC#:50SpecificWaystoImproveYourC#》一书中,有一个语言成语“Preferreadonlytoconst”,作者在其中解释了使用const的风险。我的问题不是关于readonly和const之间的区别以及何时使用它们,而是为什么一个来源将const视为一种常见的做法/代码改进,而另一方面,第二个来源将readonly视为一个习语? 最佳答案 私有(private)常

c# - LINQ 中 select 中的 cast 和 as 之间的区别

这段代码抛出异常:varquery=services.SomeQuery(bar).select(x=>(Foo)x).Where(x.PropertyOfFoo==FooState.SomeState);varresult=query.ToList();异常:Unabletocastthetype...LINQtoEntitiesonlysupportscastingEDMprimitiveorenumerationtypes.此代码有效:varquery=services.SomeQuery(bar).select(x=>xasFoo).Where(x.PropertyOfFoo=

c# - C#中const的内存分配

我使用时内存是如何分配的:publicclassMyClass{publicconststringmyEVENT="Event";//Othercode} 最佳答案 好吧,它是一个编译时常量-所以如果您从其他程序集中使用它,“事件”将被复制到那些其他程序集的IL中。是否进行内部交叉汇编取决于CLR设置IIRC。但是,如果您担心是否会为MyClass的每个实例获取一个新字符串或一个新字符串变量,则不需要担心-const意味着static。简而言之,除非您有大量大量常量(或大量字符串常量),否则不会给您带来问题。

c# - 编译器是否优化对 const 变量和文字 const 数字的操作?

假设我有一个带字段的类:constdoublemagicalConstant=43;这是代码中的某处:doublerandom=GetRandom();doubleunicornAge=random*magicalConstant*2.0;编译器是否会优化我的代码,使其不会在每次计算unicornAge时都计算magicalConstant*2.0?我知道我可以定义下一个将这个乘法考虑在内的常量。但这在我的代码中看起来更清晰。编译器对其进行优化是有意义的。 最佳答案 (这个问题是thesubjectofmybloginOctober

c# - C# 窗体程序中的 "Specified cast is not valid"错误

我遇到“指定的转换无效”错误。C#中的Windows窗体应用程序。我正在尝试从表中检索值。该值要么是smallint,要么是数字(我尝试了两个字段,都给我同样的错误),我尝试将它存储在一个int变量中。这是来源:using(SqlDataReaderrdr=cmd.ExecuteReader())//"select*fromtablewherefieldname="+value{while(rdr.Read()){intnumber=(int)rdr["quantity"];//errorishere 最佳答案 rdr["quant

C# 泛型 : cast generic type to value type

我有一个泛型类,它保存指定类型T的值。该值可以是int、uint、double或float。现在我想获取值的字节以将其编码为特定协议(protocol)。因此我想使用方法BitConverter.GetBytes()但不幸的是Bitconverter不支持泛型类型或undefinedobject。这就是为什么我要转换值并调用GetBytes()的特定重载。我的问题:如何将通用值转换为int、double或float?这不起作用:publicclassGenericClasswhereT:struct{T_value;publicvoidSetValue(Tvalue){this._va

c# - 委托(delegate)操作 : new Action or casting Action?

我发现了两种不同的方法来使用Action初始化Delegate:创建一个新的Action或转换为Action。Delegatefoo=newAction(()=>DoNothing(param));Delegatebar=(Action)(()=>DoNothing(param));这两种语法有区别吗?哪个更好,为什么?此示例中使用了委托(delegate),因为语法对于使用lambda表达式调用BeginInvoke或Invoke等方法很有用,并且将lambda表达式转换为操作很重要staticmain{Invoke((Action)(()=>DoNothing()));//OKIn

c# - Casting List<T> - 协方差/逆变问题

给定以下类型:publicinterfaceIMyClass{}publicclassMyClass:IMyClass{}我想知道如何转换List到List?我对协变/逆变主题不是很清楚,但我知道我不能因此而简单地使用List。我只能想出这个微不足道的解决方案;缺乏优雅,浪费资源:...publicListConvertItems(Listinput){varresult=newList(input.Count);foreach(varitemininput){result.Add(item);}returnresult;}....如何以更优雅/更高效的方式解决它?(请注意,我需要.N

c# - 为什么 Linq Cast<> 助手不能与隐式转换运算符一起使用?

在决定重复投票之前,请阅读到最后...我有一个实现implicitcast的类型运算符到另一种类型:classA{privateBb;publicstaticimplicitoperatorB(Aa){returna.b;}}classB{}现在,隐式和显式转换工作正常:Bb=a;Bb2=(B)a;...那么Linq的.Cast怎么来的呢?不是吗?A[]aa=newA[]{...};varbb=aa.Cast();//throwsInvalidCastException查看.Cast的源代码,没有太多的魔法:如果参数真的是一个IEnumerable的一些特殊情况,然后:foreach(

c# - 如何使用 JSON.NET 序列化静态或 const 成员变量?

我无法在任何地方找到这个问题的答案,但是当我尝试使用静态或常量成员变量序列化结构或类时,默认情况下它们不会序列化。如果我尝试通过设置MemberSerialization.OptIn强制序列化,我会收到错误。例如[JsonObject(MemberSerialization.OptIn)]publicclassTest{[JsonProperty]publicintx=1;[JsonProperty]publicstaticinty=2;}如果我尝试使用以下方法序列化此类:Testt=newTest();strings=JsonConvert.SerializeObject(t);我收