草庐IT

数学运算

全部标签

c# - 是否可以通过反射调用值类型运算符?

作为C#运算符,例如+、+=、==是可覆盖的。它让我认为它们是某种方法,因此想知道是否有一种方法可以使用反射来调用它们,例如在Int32上。 最佳答案 这个怎么样,它简单、小巧且有效:)publicTAdd(objectx,objecty){return(T)Convert.ChangeType((dynamic)x+(dynamic)y,typeof(T));} 关于c#-是否可以通过反射调用值类型运算符?,我们在StackOverflow上找到一个类似的问题:

c# - 在 Visual Studio 2015 中用于符号扩展操作数的按位或运算符

我刚刚尝试安装VisualStudio2015,在尝试编译一个旧项目时,我收到了警告CS0675Bitwise-oroperatorusedonasign-extendedoperand;considercastingtoasmallerunsignedtypefirst对于在VisualStudio2013中编译时未给出相同警告的一段代码。我发现重现所需的只是这段非常简单的代码:shorta=0;intb=0;a|=(short)b;现在,我已经阅读了thisSOquestion,我读过EricLippert'sblogpost在这个问题上,我很快就阅读了signextension,

c# - 运算符重载和优先级

在C#中,您可以重载运算符,例如+和*。在他们的数学解释中,这些运算符具有明确定义的优先顺序。这个顺序在重载时是否保持不变,它是否以某种确定性的方式改变,或者你是否也可以重载优先顺序? 最佳答案 如果重载运算符,它将始终优先于默认实现。但是,您无法更改运算符本身的优先级,因此它将保留为默认值。有关MSDN的更多信息.相关引述:User-definedoperatorimplementationsalwaystakeprecedenceoverpredefinedoperatorimplementations:Onlywhennoap

c# - 评估数学表达式的最佳算法?

评估数学表达式的最佳算法是什么?我希望能够稍微优化一下,因为我可能有一个包含各种变量的公式,我可能需要使用不同的变量对其进行数百次评估。所以基本上,如果我最初可以解析公式,以便以某种方式对其进行优化,然后我可以根据需要多次将变量传递给这个优化版本,每次它都会为我生成一个结果。我将使用Delphi或C#编写此代码。我已经使用调车场算法编写了类似的东西,但每次我需要计算相同的公式时,我都必须经过解析阶段。必须有更好的方法来做到这一点。 最佳答案 如果你想用Delphi来做,你可以看看JclExprEval单元是如何工作的,它是JEDIC

c# - 不使用空合并运算符进行延迟初始化有什么好的理由吗?

问候我今天在做一些惰性初始化代码,我想为什么不使用null合并运算符来做这件事,它更短,但后来我想这样做会有任何开销或额外成本。下面是简化的示例代码,显示了用于惰性初始化的更常见形式,然后是使用空合并运算符的形式。它们具有完全相同的结果,并且看起来是等效的。我的第一个想法是,在创建对象之后,现在可以使用??将其附加分配给自身。这不是问题吗,编译器/JIT如何优化它,是否有更邪恶的事情发生,你永远不应该用??进行延迟初始化,或者它是完全安全的,没有坏的魔力可以来自它。privateMyLazyObject_lazyObject;publicMyLazyObjectGetMyLazyObj

c# - C# 中的反射和运算符重载

这是交易。我有一个程序将加载给定的程序集,解析所有类型及其成员并编译一个TreeView(非常类似于旧的MSDN站点),然后为TreeView中的每个节点构建HTML页面。它基本上采用给定的程序集,并允许用户为其创建自己的类似MSDN的库以用于文档目的。这是我遇到的问题:每当在定义的类中遇到运算符重载时,反射都会将其作为“MethodInfo”返回,名称设置为“op_Assign”或“op_Equality”。我希望能够捕获这些并正确列出它们,但我无法在返回的MethodInfo对象中找到任何内容以准确识别我正在查看的运算符。我绝对不想只捕获以“op_”开头的所有内容,因为那肯定(在某

c# - 扩展 C# 合并运算符

在我解释我想做什么之前,如果你看下面的代码,你会明白它应该做什么吗?(已更新-见下文)Console.WriteLine(Coalesce.UntilNull(getSomeFoo(),f=>f.Value)??"defaultvalue");C#已经有一个null合并运算符,它在简单对象上工作得很好,但如果您需要访问该对象的成员则无济于事。例如Console.WriteLine(getSomeString()??"default");效果很好,但在这里对您没有帮助:publicclassFoo{publicFoo(stringvalue){Value=value;}publicstr

c# - "IN"Linq 运算符

我在这里尝试使用EntityFramework在Linq中转换旧的原始Sql查询。它对项目集合使用IN运算符。查询是这样的:SELECTMembers.NameFROMMembersWHEREMembers.IDIN(SELECTDISTINCTManufacturerIDFROMProductsWHEREActive=1)ORDERBYMembers.NameASC由于子查询的返回不是单个字符串而是字符串集合,因此我不能使用String.Contains()方法。我想过做这样的事情:varactiveProducts=(fromproductsindb.ProductSetwhere

c# - 为什么在标志枚举中使用按位或运算符,其含义为 AND

这可能是一个简单的问题,但我仍然对决定使用按位OR的原因感到困惑。假设我有一个包含四个字段的A类:classA{privateintField1;privatestaticintField2;publicintField3;publicstaticintField4;}并使用反射获取字段:varfields=typeof(A).GetFields(BindingFlags.Public|BindingFlags.Static);如果你是Reflection的新手,不知道如何使用BindingFlags,你脑海中最初的逻辑思维是:此行将选择所有静态或公共(public)字段,因为使用了按

c# - 当我使用 is 运算符时,为什么 IL 代码中只有空检查?

我想知道运算符是如何在C#中实现的。我写了一个简单的测试程序(没什么特别的,只是为了演示目的):classBase{publicvoidDisplay(){Console.WriteLine("Base");}}classDerived:Base{}classProgram{staticvoidMain(string[]args){vard=newDerived();if(disBase){varb=(Base)d;d.Display();}}}查看生成的IL代码:.methodprivatehidebysigstaticvoidMain(string[]args)cilmanaged