小编Dav*_*vid的帖子

通过 Span<T> 实现子串

一个SubstringFromStart方法的实现在什么时候Span<T>应该被利用?假设substringLength <= input.Length

 ReadOnlySpan<char> span = input.AsSpan().Slice(0, substringLength);
 return new string(span.ToArray());
Run Code Online (Sandbox Code Playgroud)

这是要走的路吗?有没有比 更好、更简洁的方法new string(span.ToArray())

c# c#-7.2 system.memory

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

为什么 xUnit.net 中 Assert.NotNull 的失败消息没有参数?

例如Assert.False,当断言失败时,我可以提供要显示的消息,例如Assert.NotNull,只有一个重载只需要检查对象。有什么原因吗?

namespace Xunit
{
  public class Assert
  {
    // ...
    public static void False(bool condition, string userMessage);
    // ...
    public static void NotNull(object @object);
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

c# xunit.net

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

C# Bitblit 从 Bitmap 到控件(Compact Framework)

我曾经使用 BitBlt 将屏幕截图保存到图像文件(.Net Compact Framework V3.5、Windows Mobile 2003 及更高版本)。工作得很好。现在我想在表单上绘制位图。我可以使用this.CreateGraphics().DrawImage(mybitmap, 0, 0),但我想知道它是否可以像以前一样与 BitBlt 一起使用并且只是交换参数。所以我写道:

[DllImport("coredll.dll")]
public static extern int BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, uint dwRop);
Run Code Online (Sandbox Code Playgroud)

(再往下走:)

IntPtr hb = mybitmap.GetHbitmap();
BitBlt(this.Handle, 0, 0, mybitmap.Width, mybitmap.Height, hb, 0, 0, 0x00CC0020);
Run Code Online (Sandbox Code Playgroud)

但形式保持纯白色。这是为什么?我犯的错误在哪里?谢谢你的意见。干杯,大卫

c# graphics windows-mobile bitblt

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

在 Powershell 中执行批处理文件

我想从批处理文件中执行以下操作:

"C:\OpenCover\tools\OpenCover.Console.exe" -register:user -target:"%VS110COMNTOOLS%..\IDE\mstest.exe" -targetargs:"/testcontainer:\"C:\Develop\bin\Debug\MyUnitTests.dll\" ... "
PAUSE
Run Code Online (Sandbox Code Playgroud)

现在我想将进程的输出记录到一个文件中,我遇到了非常方便的 powershell 用法

powershell "dir | tee output.log"
Run Code Online (Sandbox Code Playgroud)

但这不会将我的批处理文件作为第一个参数 ( powershell "my.bat | tee output.log"),因为它不是 cmdlet 或函数或脚本文件的名称。

我可以更改我的批处理文件,这样说,powershell "OpenCover.Console.exe..."但我必须调整所有引号并更改转义字符等。

有没有办法在powershell中执行批处理文件?或者有没有办法在一些powershell命令之后从批处理中删除我的行并且它全部执行“像它应该的那样”?

powershell batch-file

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

如何在LINQ中以更简洁的方式编写此示例?

来自这个清单

List<Foo> list = new List<Foo>()
{
  new Foo("Albert", 49, 8),
  new Foo("Barbara", 153, 45),
  new Foo("Albert", -23, 55)
};
Run Code Online (Sandbox Code Playgroud)

我想找到一个字典,其中名称为键,Foo列表中的第一个对象具有给定名称作为值.

有没有办法使用LINQ以比我在这里所做的更简洁的方式编写逻辑?

Dictionary<string, Foo> fooByName = new Dictionary<string, Foo>();

foreach (var a in assignmentIndetifiers)
{
  if (!names.ContainsKey(a.ValueText))
  {
    names.Add(a.ValueText, a);
  }
}
Run Code Online (Sandbox Code Playgroud)

c# linq

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

在F#中是否有使用T = XYZ导入指令的C#?

在C#中,我可以通过编写为类型定义别名

using Foo = Full.Name.Space.Of.My.TypeWithAVeryLongName;
Run Code Online (Sandbox Code Playgroud)

在代码文件中我可以从那时起引用我的类型Foo而不是TypeWithAVeryLongName并且不需要导入Full.Name.Space.Of.My.

我如何更改open ...F#中的指令以实现类似的功能?

f#

3
推荐指数
2
解决办法
69
查看次数

修复方法重写中的“CS8603:可能返回空引用”

用下面的代码

abstract class Base
{
    protected abstract T? GetValue<T>([CallerMemberName] string propertyName = "");
}

class Derived : Base
{
    protected override T GetValue<T>([CallerMemberName] string propertyName = "")
    {
        return default;
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器告诉我,return default;我有一个 CS8603“可能的空引用返回”,这是真的。但是,如果我将 a 附加?到该方法的返回类型,以便读取(如抽象方法),protected override T? GetValue<T>([CallerMemberName] string propertyName = "")编译器会告诉我

  • CS0508“Derived.GetValue(string)”:返回类型必须为“T”才能匹配重写成员“Base.GetValue(string)”。
  • CS0453 类型“T”必须是不可为 null 的值类型,才能将其用作泛型类型或方法“Nullable”中的参数“T”。

如何告诉编译器我的意图GetValue<T>可能返回空引用,而不是该方法的返回类型应该是Nullable<T>

c# nullable-reference-types

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

C#中的计算与Windows计算器一样准确

当我在C#中执行以下双重乘法时,100.0 * 1.005我得到100,49999999999999了结果.我相信这是因为无法表示确切的数字(或者在评估表达式时的某些媒体间结果).当我在calc.exe中进行相同的计算时,我得到100.5了预期的结果.

另一个例子是基本上九倍增量0.001(这是第一次发生偏差)9d * 0.001d = 0,0090000000000000011.当我在calc.exe中进行相同的计算时,我得到0.009了预期的结果.

现在我可以争辩说,我应该选择小数.但是对于十进制,我得到了其他计算的问题,例如,((1M / 3M) * 3M) = 0,9999999999999999999999999999当calc.exe说1.

使用calc.exe,我可以将1乘3分多次,直到一些真正的小数,再乘以3再次多次,然后达到精确1.因此我怀疑,calc.exe在内部用分数计算,但显然是真正的大分数,因为它计算

(677605234775492641 / 116759166847407000) + (932737194383944703 / 2451942503795547000)
Run Code Online (Sandbox Code Playgroud)

在进行长计算时,公共分母是-3422539506717149376(发生溢出),所以它必须至少是ulong.有人知道如何实现calc.exe中的计算吗?这个实现是否公开用于重用?

c#

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