草庐IT

外参数

全部标签

c# - 无法从用法中推断出开放泛型类型参数

在这个问题中,当提到编译器时,我实际上指的是Roslyn编译器。使用IntelliSense时会出现问题,这被认为是相同的编译器。出于演示目的和完整性,使用了以下类(使用带有C#6.0和.NET4.6.1的VisualStudio2015):publicclassA{publicIEnumerableB{get;set;}}publicclassB{publicIEnumerableC{get;set;}}publicclassC{}publicclassHelper{}看下面的扩展方法:publicstaticvoidFooBar(thisHelper>helper,Expressi

c# - 使用 ODP.NET 按名称绑定(bind)查询参数

我目前正在为Oracle(System.Data.OracleClient)使用MicrosoftADO.NET提供程序。我知道它肯定不是最好的Oracle提供程序并且它willsoonbedeprecated,我应该改用Oracle的ODP.NET。我仍然使用MS提供程序的原因是因为ODP.NET按位置绑定(bind)参数,而不是按名称。当您在查询中使用许多参数时,这确实是一个PITA,因为您必须小心以正确的顺序添加它们,这很容易导致错误。当您在同一个查询中多次使用同一个参数时,这也很烦人,例如:SELECTA,B,CFROMFOOWHEREX=:PARAM_XOR:PARAM_X=

c# - 自动重构以将参数名称添加到方法调用

我正在进行大型重构。我有几十种方法,它们是通过位置参数调用的。现在我想通过命名参数调用它们。这些方法存在于几个非继承的类中,它们具有相同的名称,但它们的签名不同。示例:定义publicclassFoo{publicstaticFooCreate(intcount,stringname){...}}publicclassBar{publicstaticBarCreate(stringdescription,boolyesNo,floatfactor){...}}我想替换以下调用,来自publicvoidCreateSomeObjects(){varfoo=Foo.Create(123,"

c# - 在 WebAPI 2 中控制 DateTime 参数格式

所以我有一个用C#编写的WebAPI2Controller,它采用DateTime类型的查询参数等。这是一个基于日期过滤器从数据存储中返回所有值的API。比如,让我们说:publicMyThingGetThing([FromUri]DateTimestartTime){//filterandreturnsomeresults}我遇到了两个问题:出于某种原因,尽管传入了ISO8601UTC格式(带Z)日期,WebAPI仍将其反序列化为本地DateTime,而不是Utc。这显然是不可取的。我不确定如何修改管道以使其正确理解UTC-0日期时间。我将返回资源的链接作为响应主体的一部分,其中我使

c# - 只读 ("const"-like) C# 的函数参数

我有C++背景,习惯于将const关键字添加到函数定义中,以使对象以只读值传递。但是,我发现这在C#中是不可能的(如果我错了请纠正我)。经过一番谷歌搜索后,我得出的结论是,创建只读对象的唯一方法是编写一个仅具有“get”属性的接口(interface),然后将其传入。优雅,我必须说。publicinterfaceIFoo{IMyValInterfaceMyVal{get;}}publicclassFoo:IFoo{privateConcreteMyVal_myVal;publicIMyValInterfaceMyVal{get{return_myVal;}}}我会将它传递给:publi

c# - 泛型参数的属性有什么用?

将属性放在类或方法的通用参数上是有效的(即编译和运行):publicclassMyClass{privatevoidMyMethod(){}}publicclassMyAttribute:Attribute{}我从未见过这种用法,并且正在努力想出您为什么想要这样做的原因。这只是语言规范的一个怪癖/副作用,还是有正当/有用的理由将属性放在这个位置? 最佳答案 出于同样的原因,属性对任何构造都是有用的;它们提供元数据,反射或其他后处理器可以使用这些元数据来做各种事情。例如,您可能有一个AOP系统,它使用类型参数上的属性来应用某些否则无法

c# - Json.NET Serialization Callbacks 中的 StreamingContext 参数有什么用?

我试图了解Json.NET序列化回调中应该包含的StreamingContext参数是什么,首先我以为你会允许我访问正在读取的当前json树,但它似乎并没有,我尝试了JSON对象的可能排列,但没有一个我可以从StreamingContext参数中得到任何东西。这是一个例子,展示了我正在做的事情,如果我错了请纠正我:usingSystem;usingSystem.Runtime.Serialization;usingNewtonsoft.Json;namespaceTestes{publicclassProgram{[JsonObject(MemberSerialization.OptI

c# - "Two-level"委托(delegate)的泛型方法参数推断

考虑以下示例:classTest{publicvoidFun(Funcf){}publicstringFun2(stringtest){return"";}publicTest(){Fun(Fun2);}}这编译得很好。我想知道为什么我不能删除通用参数?我收到无法从用法中推断出的错误。我知道这样的推断对编译器来说可能具有挑战性,但它似乎是可行的。我想要对此行为的解释。编辑回答JonHanna的回答:那为什么这样行得通呢?classTest{publicvoidFun(T1a,Funcf){}publicstringFun2(inttest){returntest.ToString();

c# - 对传递 Expression 与 Func 参数感到困惑

我在理解表达式和函数的工作方式之间的区别时遇到了一些困难。当有人更改方法签名时出现此问题:publicstaticListThingList(FuncaWhere)到publicstaticListThingList(Expression>aWhere)这破坏了我的调用代码。旧的调用代码(有效)如下所示:...objecty=newobject();FuncwhereFunc=(p)=>p==y;things=ThingManager.ThingList(whereFunc);新代码(不起作用)如下所示:...objectx=newobject();Expression>whereEx

c# - C# 是否支持 inout 参数?

在C#中,我使用StreamReader逐行读取文件。我还将当前行号保存在int中,用于报告可能的错误消息。读取每一行都伴随着一些测试(比如以#开头的行是注释,需要跳过),所以我打算将整个读取过程放在一个函数中,它将继续读取直到遇到有用的行,然后返回该行。如果遇到EOF,它将简单地返回null。当我将此函数定义为stringread(StreamReadersr,outintlineNumber)时,我认为我很聪明,但现在事实证明C#无法执行类似lineNumber++在那个函数里面。它假设变量还没有被赋值,可能是因为它无法知道在这个函数调用之前它是否已经被赋值。所以,问题很简单:我如