草庐IT

C# null 合并运算符返回 null

最近我的同事向我展示了一段无法正常工作的代码:publicclassSomeClass{privateIList_categories;publicvoidSetCategories(){_categories=GetCategories()??newList();DoSomethingElse();}publicIListGetCategories(){returnRetrieveCategories().Select(Something).ToList();}}(我知道运算符是多余的,因为linqToList将始终返回一个列表,但这就是代码的设置方式)。问题是_categories

c# - Linq 和相等运算符 : Expression of type 'System.Int32' cannot be used for parameter of type 'System.Object'

我试图重写C#中的相等(==)运算符来处理任何类型与自定义类型的比较(自定义类型实际上是null周围的包装器/框)。所以我有这个:internalsealedclassNothing{publicoverrideboolEquals(objectobj){if(obj==null||objisNothing)returntrue;elsereturnfalse;}publicstaticbooloperator==(objectx,Nothingy){if((x==null||xisNothing)&&(y==null||yisNothing))returntrue;returnfal

c# - 隐式运算符应该处理 null 吗?

我们有一个具有隐式字符串运算符的类型。它看起来像这样:publicclassFoo{readonlystring_value;Foo(stringvalue){_value=value;}publicstaticimplicitoperatorstring(Foofoo){returnfoo._value;}publicstaticimplicitoperatorFoo(stringfooAsText){returnnewFoo(fooAsText);}}我们刚刚遇到这样一种情况,其中传递给隐式运算符的实例是null。显然,我们以NullReferenceException结束。我认为

c# - XML 文档中的引用运算符

我想在中引用一个运算符XMLdocumentation标签,但我似乎找不到任何关于如何操作的提示。MSDNarticle在这个标签上只展示了一个引用方法的简单例子,并没有涉及可以引用的不同类型的成员。特别是,我想引用一个隐式转换运算符,但也欢迎引用运算符的一般规则。例子假设我们有一个简单的结构,我们为其定义了==,!=和隐式转换运算符:publicstructMyStructure{publicintValue{get;set;}publicstaticbooloperator==(MyStructurex,MyStructurey)=>x.Value==y.Value;publics

c# - 为什么 C# 5.0 await 关键字被列为运算符而不是修饰符?

MSDN库liststheawaitkeywordasanoperator.这对我来说似乎很奇怪-我以为它是一个修饰符,比如theasynckeyword.为什么这是一个运算符? 最佳答案 async是声明的修饰符。类似于public.await是一种使用异步运算符并对其执行某些操作的操作。类似于return.await不是修改放在它后面的内容,而是指定如何处理该操作。对比async实际上并没有修改任何东西,它只是标记一个特定的方法是async的样式(从语法的角度来看,最终的await执行了对方法结构的所有更改)。

c# - 重载的 false 运算符什么时候被执行,它有什么用?

我一直在寻找实际执行重载的false运算符的实际工作代码。Thisquestion(What'sthefalseoperatorinC#goodfor?)有点相同,但接受的答案链接到返回404错误的url。我也看过Howdoesoperatoroverloadingoftrueandfalsework?以及其他一些问题。我在几乎所有答案中发现的是,false仅在您使用短路和类似x&&y时才会执行。这被评估为T.false(x)?x:T.&(x,y).好的,所以我有以下代码。struct包含一个int并且如果int大于零则认为它自己为真。:publicstructMyStruct{pri

c# - 当一个操作数是接口(interface)时,回退到 Object 的 == 运算符的原因是什么?

考虑以下类型:classA{}classB{}interfaceIC{}Aa=null;//thevaluedoesn'tmatter-nulloranythingelse,forallthreeBb=null;ICc=null;以下doesnotcompile:varx=a==b;但是以下确实编译(正如我惊讶地发现的那样):varx=a==c;据我所知,编译器回退到使用默认的==运算符,它是在对象上定义的,因此接受任何类型的参数。IL看起来像这样(忽略ldfld的细节):ldarg.0ldfldclassAaldarg.0ldfldclassICcceqstloc.0换句话说,它使用

c# - 非短路 bool 运算符和 C# 7 模式匹配

我目前正在编写一个C#应用程序,目标是.NET4.7(C#7)。在尝试使用使用“is”关键字声明变量的新方法后,我感到很困惑:if(变量是MyClassclassInstance)这样就可以了,但是在做的时候:if(true&variableisMyClassclassInstance){vara=classInstance;}VisualStudio(我使用的是2017)向我显示错误Useofunassignedlocalvariable'classInstance'。使用&(&&)的短路版本它工作正常。我是否遗漏了有关&运算符的内容?(我知道使用短路版本更常用,但此时我只是好奇)

c# - 在 C# 中使用运算符构建自定义表达式树

这个问题是关于使用C#(或任何其他语言)中的运算符在.NET中构建自定义表达式树。我提供了问题以及一些背景信息。对于我的managed2-phase64-bitassembler我需要对表达式的支持。例如,一个人可能想要组装:mystring:DB'hello,world'TIMES64-$+mystringDB''表达式64-$+mystring不能是一个字符串,而是一个实际有效的表达式,具有语法和类型检查以及VS中的IntelliSense的优点,类似于:64-Reference.CurrentOffset+newReference("mystring");此表达式在构造时不会求值

c# - C# 中的运算符重载

classPoint{privateintm_PointX;privateintm_PointY;publicPoint(intx,inty){m_PointX=x;m_PointY=y;}publicstaticPointoperator+(Pointpoint1,Pointpoint2){PointP=newPoint();P.X=point1.X+point2.X;P.Y=point1.Y+point2.Y;returnP;}}例子:PointP1=newPoint(10,20);PointP2=newPoint(30,40)P1+P2;//operatoroverloading