草庐IT

匿名管道

全部标签

c# - c# 中的匿名类型是否可以通过反射访问?

由于匿名类型的名称是编译器生成的,因此可以通过反射访问吗? 最佳答案 是的。就CLR/框架而言,它们是普通类型。事实上,你可以做一些interestingthings对匿名类型的反射(reflection)...虽然当前的C#编译器实际上创建了一个泛型类型,因此两个仅具有不同类型的“Foo”属性的匿名类型将共享一个泛型类型,但具有不同的封闭类型。 关于c#-c#中的匿名类型是否可以通过反射访问?,我们在StackOverflow上找到一个类似的问题: http

c# - 为什么 Object.Equals() 在从不同的程序集实例化时对相同的匿名类型返回 false?

我有一些代码可以将强类型业务对象映射到匿名类型,然后将其序列化为JSON并通过API公开。将我的解决方案重组为单独的项目后,我的一些测试开始失败。我做了一些挖掘,结果是Object.Equals对来自不同程序集的代码返回的匿名类型的行为不同-我不确定为什么,或者我可以做些什么来解决它。在https://github.com/dylanbeattie/AnonymousTypeEquality有完整的重现代码但实际上破坏的部分在下面。此代码在测试项目中:[TestFixture]publicclassTests{[Test]publicvoidBothInline(){vara=new{

c# - 字典的匿名集合初始值设定项

是否可以隐式声明下一个Dictionary:{urlA,new{Text="TextA",Url="UrlA"}},{urlB,new{Text="TextB",Url="UrlB"}}所以我可以这样使用它:foreach(varkindic){k.Key.Text=k.Value.Text;k.Key.NavigateUrl=k.Value.Url;}? 最佳答案 怎么样:vardict=new[]{new{Text="TextA",Url="UrlA"},new{Text="TextB",Url="UrlB"}}.ToDicti

c# - C# 中匿名未附加 block 的值是什么?

在C#中,您可以在不附加到任何其他语句的方法内部创建一个block。publicvoidTestMethod(){{stringx="test";stringy=x;{intz=42;intzz=z;}}}这段代码编译和运行就像main方法中的大括号不存在一样。还要注意block内的block。是否存在这会有值(value)的场景?我还没有找到任何东西,但很想听听其他人的发现。 最佳答案 范围和垃圾收集:当您离开未附加的block时,其中声明的任何变量都会超出范围。这让垃圾收集器可以清理这些对象。RayHayes指出.NET垃圾收集

c# - 共享一个类的离散匿名方法?

我在玩EricLippert的Ref来自here的类(class).我在IL中注意到,看起来两个匿名方法都在使用相同的生成类,即使这意味着该类有一个额外的变量。虽然只使用一个新的类定义似乎有点合理,但令我惊讶的是,只有一个c__DisplayClass2的实例被build。这似乎暗示Ref的两个实例引用相同的c__DisplayClass2那不是说y吗?直到vart1才能收集被收集,这可能比joik之后发生得晚得多返回?毕竟,不能保证某些白痴不会编写直接访问y的函数(直接在IL中)。通过vart1之后joik返回。也许这甚至可以通过反射而不是通过疯狂的IL来完成。sealedclass

c# - 如何创建和访问在 C# 中作为参数传递的匿名类的新实例?

我创建了一个函数,该函数接受SQL命令并生成可用于填充类实例列表的输出。该代码效果很好。我在这里包含了一个没有异常处理的稍微简化的版本,仅供引用-如果您想直接跳转问题,请跳过此代码。不过,如果您在这里有任何建议,我会洗耳恭听。publicListReturnList()whereT:new(){ListfdList=newList();myCommand.CommandText=QueryString;SqlDataReadernwReader=myCommand.ExecuteReader();TypeobjectType=typeof(T);FieldInfo[]typeField

c# - 是否可以在 C# 中使用一组变量/动态字段声明匿名类型?

在C#中,我想弄清楚是否可以声明一个匿名类型,其中的字段直到运行时才知道。例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗?我正在处理的具体情况是将参数传递给Dapper,我事先不知道我将拥有多少参数。List>paramList=newList>(){newTuple("key1","value1"),newTuple("key2","value2")...};我想将此List(或等效的Map)转换为匿名类型,我可以将其作为查询参数传递给Dapper。所以理想情况下,如果定义为匿名类型,上面的列表将看起来像这样:new{key1=value1,key2=val

c# - lambda 表达式和匿名方法之间的区别 - C#

这个问题在这里已经有了答案:delegatekeywordvs.lambdanotation(6个答案)关闭9年前。重复:delegatekeywordvs.lambdanotation我了解匿名方法可用于定义委托(delegate)和编写内联函数。使用Lambda表达式与此有什么不同吗?我想我对何时使用什么有点困惑。编辑:此外,似乎要使用匿名或lambda,该类型是否需要扩展方法?

c# - 在 .NET 应用程序中检测重定向控制台输出中的关闭管道

.NETConsole类及其默认的TextWriter实现(可作为Console.Out隐含在例如Console.WriteLine中())当应用程序将其输出通过管道传输到另一个程序时,不会发出任何错误信号,并且另一个程序在应用程序完成之前终止或关闭管道。这意味着应用程序可能会运行超过必要的时间,将输出写入黑洞。如何检测重定向管道另一端的关闭?更详细的解释如下:这里有一对演示问题的示例程序。Produce相当慢地打印大量整数,以模拟计算效果:usingSystem;classProduce{staticvoidMain(){for(inti=0;iConsume只读取前10行输入然后退

c# - MVC 中带有动态匿名对象的 RuntimeBinderException

代码我有一个MVC项目,其中的部分页面看起来有点像这样:"%>"data-window-url="/SomeUrl/Partial//">它所做的是打开另一个部分(在Model.TargetTab中命名的部分)如果它是当前可见的选项卡,则使用Model.Model,否则只呈现一个空的div(在需要时使用jQuery加载)。它的名字是这样的:这曾经有效。然后我更改了进入Model的值,它停止工作了。我改回来了,还是不行。需要明确的是,hgstatus目前不显示任何这些文件。异常Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:'o