小编use*_*923的帖子

Array.Sort in with nontrivial comparison function

在Nutshell中考虑C#5.0中的以下代码,p.289:

int[] numbers = { 1, 2, 3, 4, 5 };
Array.Sort (numbers, (x, y) => x % 2 == y % 2 ? 0 : x % 2 == 1 ? -1 : 1); 
Run Code Online (Sandbox Code Playgroud)

给出了结果{3, 5, 1, 2, 4}.

我在纸上尝试了这个并得到了 {1, 3, 5, 2, 4}.

为什么计算机排序3 > 5 > 1

c# sorting algorithm lambda

6
推荐指数
2
解决办法
3226
查看次数

命名参数在C#中调用可变参数编号

假设我有以下C#函数:

void Foo(int bar, params string[] parpar) { }
Run Code Online (Sandbox Code Playgroud)

我想使用命名参数调用此函数:

Foo(bar: 5, parpar: "a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

编译器给出错误消息:"命名参数不能位于位置",因为我在"b"和"c"之前没有名称.

有没有办法使用命名参数而不手动将params表示为数组?

c# function params

6
推荐指数
2
解决办法
3330
查看次数

为什么拳击参考类型?

ECMA-335,1.8.2.4指定可盒装类型包括引用类型(不包括托管指针/ byrefs)和通用参数.

拳击参考类型的目的是什么?与未装箱的参考对象相比,盒装参考对象的功能和内存表示是否有任何不同?

.net c# clr boxing

6
推荐指数
1
解决办法
480
查看次数

JIT-ed异常处理程序实现

考虑以下IL代码:

    .method public static void Main()
    {
        ldstr "Starts Here"
        call void [mscorlib] System.Console::WriteLine(string)
        .try {      
            ldstr "Try Me!"
            call void [mscorlib] System.Console::WriteLine(string)
            leave.s Done
        }
        catch [mscorlib] System.Exception {
            ldstr "Catch Me!"
            call void [mscorlib] System.Console::WriteLine(string)
            leave.s Done
        }
    Done:
        ldstr "Ends Here"
        call void [mscorlib] System.Console::WriteLine(string)
        ret
    }
Run Code Online (Sandbox Code Playgroud)

CLR如何try在JIT编码中定义块?本机代码看起来如下:

...
00900076 8b0538214703    mov     eax,dword ptr ds:[3472138h] ("Starts Here")
...

00900090 8b053c214703    mov     eax,dword ptr ds:[347213Ch] ("Try Me!")
...

009000a2 eb1b            jmp     009000bf ;// Done

009000a4 8945d4 …
Run Code Online (Sandbox Code Playgroud)

.net clr assembly il exception-handling

5
推荐指数
1
解决办法
185
查看次数

C# 7 嵌套局部函数——易于阅读?

C# 7 引入了局部嵌套函数。它们为代码提供了更好的结构,但它们是否提高了可读性?是否有任何标准、建议和最佳实践?对于您的眼睛和美感,什么更容易阅读?

class Nested
{
    void Foo()
    {
        void Bar()
        {
        }

        void Baz()
        {
        }

        Bar();
        Baz();
    }
}

class Usual
{
    void Bar()
    {
    }

    void Baz()
    {
    }

    void Foo()
    {
        Bar();
        Baz();
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# readability code-readability

5
推荐指数
0
解决办法
748
查看次数

ASP.Net Core Razor 组件:await 与 .Result

考虑 ASP.Net Core 的视图文件中的以下两行:

    @Component.InvokeAsync("Greeting").Result
    @await Component.InvokeAsync("Greeting")
Run Code Online (Sandbox Code Playgroud)

有什么不同?哪种情况下更可取?在我的代码中,它们都给出相同的视觉结果;是否存在结果可能不同的情况?

c# asp.net-mvc razor asp.net-core-mvc

5
推荐指数
1
解决办法
1738
查看次数

将C#表达式树保存到文件中

我想调试表达式并将表达式树保存到文件中:

var generator = DebugInfoGenerator.CreatePdbGenerator();
var document = Expression.SymbolDocument(fileName: "MyDebug.txt");
var debugInfo = Expression.DebugInfo(document, 6, 9, 6, 22);
var expressionBlock = Expression.Block(debugInfo, fooExpression);
var lambda = Expression.Lambda(expressionBlock, parameters);
lambda.CompileToMethod(method, generator);
var bakedType = type.CreateType();
return (type)bakedType.GetMethod(method.Name).Invoke(null, parameters);
Run Code Online (Sandbox Code Playgroud)

如何查找或保存"MyDebug.txt"?

c# debugging expression debug-symbols

4
推荐指数
1
解决办法
1765
查看次数

进程内存与AppDomain内存分配

假设我有.Net应用程序App.exe,它创建三个域:DomainA,DomainB和DomainC.

我们可以说CLR会为App.exe进程分配一些物理内存,然后这个内存在我们的三个域之间分成一定比例吗?

或者对于每个新域,独立于App.exe和其他域分配的内存给出一个新的独立内存部分?

简单来说:我可以将逻辑内存分配想象为带有歌曲的(顺序)磁带(其中歌曲是AppDomans),或者作为一种FAT32,其中文件随机定位,我们只知道它们在磁盘上的位置?

.net memory clr appdomain

3
推荐指数
1
解决办法
1054
查看次数

尾巴.ILAsm中的前缀 - 任何使用示例?

ECMA-335,III.2.4指定tail.可用于递归函数的前缀.但是,我无法在C#和F#代码中找到它的用法.有没有使用的例子?

.net c# clr f# ilasm

3
推荐指数
1
解决办法
363
查看次数

更好的Enumerable.Range上升和下降范围?

假设我有两个点,int x1, x2哪里x1可以更大,更小或相等x2.我想生成这两个点之间的所有整数(包括开头x1和结尾x2),或者只是x1两个点相等的值.是否有任何优雅的方式来生成IEnumerable<int>这些值?

.net c# linq

3
推荐指数
1
解决办法
458
查看次数

如何在 SpecFlow 场景的步骤定义中生成 List&lt;T&gt;?

在 SpecFlow步骤定义的文档中,它显示了一个示例,您可以在场景中使用逗号分隔列表在步骤定义中创建列表:

例如:

鉴于我“周二、周五、周日”有空

会导致:

@Given("I am available on \"(.+)\"")
public void I_have_cukes_in_my_belly(List<String> days) {
    // Do something with the days
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我这样做时,我得到了这个:

@Given("I am available on ""(.*)"")
public void I_have_cukes_in_my_belly(string days) {
    // Do something with the days
}
Run Code Online (Sandbox Code Playgroud)

我使用的是 VS 2012 和 SpecFlow 1.9.1 版本。有谁知道我可能做错了什么?或者我该如何解决这个问题?

提前致谢。

c# specflow visual-studio-2012

1
推荐指数
1
解决办法
7381
查看次数

从C#调用ILAsm vararg函数

我正在编写ILAsm函数,它接收可变数量的参数并返回它们的总和:

.class public auto ansi TestSentinel
{
    .method public static vararg unsigned int64 Sum( /* all arguments are optional */ )
    {
        .locals init( value class [mscorlib]System.ArgIterator Args, 
                      unsigned int64 Sum, 
                      int32 NumArgs )
        ... 
        ldloc Sum
        ret
    }
}
Run Code Online (Sandbox Code Playgroud)

我的DLL编译成功但我不能用C#代码调用这个函数.我打电话的时候

var k = TestSentinel.Sum(1);
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:

Error  The best overloaded method match for 'TestSentinel.Sum(__arglist, ...)' has some invalid arguments
Run Code Online (Sandbox Code Playgroud)

我收到任何其他数量的论据wrong argument number.调用我的ILAsm函数的正确方法是什么?

.net c# clr il

1
推荐指数
1
解决办法
165
查看次数

存储注释的位置以及如何提取注释?

假设我们有以下代码:

/// <summary>
/// Test class comment
/// </summary>
public class Test
{
    /// <summary>
    /// Method comment
    /// </summary>
    /// <param name="a">First parameter comment</param>
    /// <param name="b">Second parameter comment</param>
    /// <returns>Return value comment</returns>
    public int Foo(int a, int b) { return 1; }
}
Run Code Online (Sandbox Code Playgroud)

C#编译器在汇编中存储注释的位置?如果IntelliSence可以使用评论,我也想要.

.net c# reflection clr visual-studio

1
推荐指数
1
解决办法
269
查看次数