草庐IT

action_type

全部标签

c# - 为什么 typeA == typeB 比 type == typeof(Type B) 慢?

我最近一直在优化/对一些代码进行基准测试并遇到了这个方法:publicvoidSomeMethod(TypemessageType){if(messageType==typeof(BroadcastMessage)){//...}elseif(messageType==typeof(DirectMessage)){//...}elseif(messageType==typeof(ClientListRequest)){//...}}这是从其他地方的性能关键循环调用的,所以我很自然地假设所有这些typeof(...)调用都增加了不必要的开销(我知道这是一种微优化)并且可以移动到类中的私有

c# - 简易喷油器 : Registering a type with constructor argument that's based on its parent

我目前正在从我的项目中删除Ninject,并转而使用SimpleInjector,但有一件事我无法正常工作。对于我的日志记录,在注册服务时,我以前能够将参数传递到我的日志记录类中_kernel.Bind().To().WithConstructorArgument("name",x=>x.Request.ParentContext.Request.Service.FullName);我正在寻找一种在SimpleInjector中重新创建它的方法。到目前为止,除了这个,我还有其他所有工作。通过执行以下操作,我可以使日志记录正常工作,尽管没有显示正确的记录器名称:_container.Re

c# - 为什么在使用异步方法时会捕获类作用域变量,而在使用 Action<T> 时却不会(内部代码示例)?

遛狗的时候我在想Action,Func,Task,async/await(是的,Nerd,我知道……)并在脑海中构建了一个小测试程序,想知道答案是什么。我注意到我不确定结果,所以我创建了两个简单的测试。这是设置:我有一个类作用域变量(字符串)。它被分配了一个初始值。变量作为参数传递给类方法。该方法不会直接执行,而是分配给“Action”。在Action执行之前,我更改了变量的值。输出结果是什么?初始值,还是更改后的值?有点意外但可以理解,输出是改变后的值。我的解释是:在Action执行之前,变量不会被压入堆栈,所以它将是被改变的。publicclassfoo{stringtoken;p

c# - 如何修复 'T' 是 'type parameter' 但被用作 'variable' 编译错误

我需要检查泛型类型参数T是MyEntity还是它的子类。下面的代码会导致这个编译器错误:'T'isa'typeparameter'butisusedlikea'variable'如何修复?publicclassMyEntity{}staticvoidTest(){//Error34'T'isa'typeparameter'butisusedlikea'variable'if(TisMyEntity){}} 最佳答案 您可以使用IsAssignableFromType上的方法检查是否有一个Type可以分配给另一个。if(typeof(

使用 Json.Net : Error converting value to type 的 C# 枚举反序列化

我正在使用Json.NET序列化/反序列化一些JSONAPI。API响应有一些整数值映射到应用程序中定义的枚举。枚举是这样的:publicenumMyEnum{Type1,Type2,Type3}并且JSONAPI响应具有以下内容:{"Name":"abc","MyEnumValue":"Type1"}有时,API会为我的枚举中未定义的MyEnumValue字段返回一个值,如下所示:{"Name":"abc","MyEnumValue":"Type4"}抛出异常:Errorconvertingvalue"Type4"totype'MyEnum'有没有办法通过分配默认值或其他方法来避免应

c# - 通用扩展方法 : Type argument cannot be inferred from the usage

我正在尝试创建一个适用于类型化数据表的通用扩展方法:publicstaticclassExtensions{publicstaticTableTypeDoSomething(thisTableTypetable,paramExpression>[]predicates)whereTableType:TypedTableBasewhereRowType:DataRow{//dosomethingtoeachrowofthetablewheretherowmatchesthepredicatesreturntable;}[STAThread]publicstaticvoidmain(){M

C# Action 、闭包和垃圾收集

我是否需要将MyAction设置为null以便垃圾回收能够继续处理这些类中的任何一个?当两个类的生命周期几乎相同时,我就不那么担心了。当Class1的生命周期比Class2长得多或Class2的生命周期比Class1长得多时,我的问题更合适。这里的代码被精简了。假设Class1和Class2都包含其他可能影响其生命周期的成员和方法。publicclassClass1:IDisposable{publicActionMyAction{get;set;}//Isthisnecessary?publicvoidDispose(){MyAction=null;}}publicclassClas

c# - 带有参数的 Dispatch.Invoke( new Action...)

以前我有Dispatcher.Invoke(newAction(()=>colorManager.Update()));从另一个线程更新显示到WPF。由于设计原因,我不得不更改程序,并且我必须将ColorImageFrame参数传递到我的ColorStreamManager.Update()方法中。正在关注this链接,我将调度程序修改为:Dispatcher.Invoke(newAction((p,v)=>p.Update(v)));它编译正常,但根本无法运行。VS2010说“参数计数不匹配。”在我的ColorStreamManager.Update()方法中我有RaisePrope

c# - "Possible multiple enumeration of IEnumerable"与 "Parameter can be declared with base type"

在Resharper5中,以下代码导致list出现警告“Parametercanbedeclaredwithbasetype”:publicvoidDoSomething(Listlist){if(list.Any()){//...}foreach(variteminlist){//...}}在Resharper6中,情况并非如此。但是,如果我将方法更改为以下内容,我仍然会收到该警告:publicvoidDoSomething(Listlist){foreach(variteminlist){//...}}原因是,在这个版本中,list只枚举一次,所以改成IEnumerable不会自动

c# - 如何解决 '...is a ' type', which is not valid in the given context'? (C#)

以下代码会产生错误:Error:'CERas.CERAS'isa'type',whichisnotvalidinthegivencontext为什么会出现这个错误?usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;namespaceWinApp_WMI2{publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}privatevoidForm1_Load(objectsender,EventArgse){