小编dca*_*tro的帖子

如何为TcpListener编写自己的异步包装器?

没有F#异步包装(在PowerPack中)为既不 TcpListener.BeginAcceptTcpClient()也没有EndAcceptTcpClient().

我如何编写自己的包装器,以便我可以使用let!async关键字并行运行它?

f# asynchronous

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

Z-index:make元素位于其父级的兄弟之下

想象一下这个DOM:

<header>
    <h1> header </h1>
    <!-- other elements -->
    <nav>
        nav
    </nav>
</header>

<div>
    content
</div>
Run Code Online (Sandbox Code Playgroud)

标题和导航都定位为fixed.内容div定位为relative.我需要按此顺序(从上到下)创建一个带有z-index的堆栈:

  • 标题*:不是(nav)
  • 内容
  • 导航

我很难将导航放在底部(换句话说,在其父母的兄弟之下).我认为所有头衔的孩子都不得不在顶部或在其兄弟之下......这是对的吗?如果是这样,这种情况是否有解决方法?

html css z-index css3

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

Process.Start()和手动运行有什么区别?

我正在为我工​​作的公司创建一个应用程序,它将备份我们提供的某些软件的数据.它具有将SQL数据库,文件夹,文件和注册表项添加到备份作业的选项,然后将其放入Zip文件中.还可以选择在需要时还原备份.

我在注册表备份和还原方面遇到问题.我已经经历了许多迭代试图让这个工作,但我已经简化了它,以最好地说明我的问题,我希望有人可以帮助.

基本上我通过使用带命令行参数的regedit.exe导入".reg"文件.我试过通过使用ProcessStartInfo()构建它,但它没有用.所以为了测试问题,我正在创建一个批处理文件,并按如下方式运行它:

    File.WriteAllText("ImportReg.bat", "regedit /s /i MyRegFile.reg");
    Process.Start("ImportReg.bat");
Run Code Online (Sandbox Code Playgroud)

然而,这不起作用.

批处理文件已成功创建,REG文件有效.这两个文件都与EXE位于同一个位置,所以我认为问题不在于使用哪个目录.如果我自己从这个位置运行批处理文件,它会成功导入注册表文件.我是我正在测试它的机器上的完整管理员.

我也有从注册表导出的问题.注册表的某些部分导出正常,而其他部分则没有.但是,如果我将导出设置为像上面导入的批处理文件那么它每次都有效.

有人能帮忙吗?我看不出为什么我的批处理文件有效,但是当它通过Process.Start运行时却看不到.任何建议都会受到大力赞赏.

c# windows regedit process.start

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

使用SoundPlayer播放声音

我正在尝试播放特定的声音.但是,我似乎无法访问我在解决方案资源管理器中添加的文件.(我有一个名为"Sounds /"的文件夹,里面有几个.wav-soundeffects)

当我将文件路径硬编码到我的硬盘上的随机固定位置时,它可以正常工作.此外,当我将我的资源放在我的"bin/debug /"文件夹中时,它工作正常(这是我最接近AppDomain.CurrentDomain.BaseDirectory函数的工作相对路径).

在使用我在解决方案资源管理器中添加的文件时,如何使SoundPlayer工作?

c# audio relative-path solution-explorer soundplayer

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

这个语法在抽象类的声明中意味着什么?

我想这是一个简单的问题,但我找不到正确的答案.这个语法是什么意思?我有点混淆行末的new():

public abstract class SomeClass<E> : Controller where E : ISomeInterface, new()
{
    //code of the abstract class
}
Run Code Online (Sandbox Code Playgroud)

c#

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

DateTime到LocalDate(NodaTime)

我有一个DateTime需要转换为NodaTime LocalDate.可以这样做吗?

我有这个:

 DateTime modifiedDate = File.GetLastWriteTime(file);
Run Code Online (Sandbox Code Playgroud)

我想要这个:

LocalTime modifiedDate = File.GetLastWriteTime(file);
Run Code Online (Sandbox Code Playgroud)

但看起来 NodaTime API无法从中获取日期值GetLastWriteTime.

所以我要么a)将DateTime转换为LocalTime或b)以某种方式使用LocalTime从中获取日期值 GetLastWriteTime

c# datetime localtime nodatime

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

使用AutoFixture模拟依赖项

我最近开始使用AutoFixture + AutoMoq,我正在尝试创建一个实例Func<IDbConnection>(即连接工厂).

var fixture = new Fixture().Customize(new AutoMoqCustomization());
var connectionFactory = fixture.Create<Func<IDbConnection>>();
Run Code Online (Sandbox Code Playgroud)

这看起来效果很好:

  1. 我的测试系统可以调用代理,它将得到一个模拟 IDbConnection
  2. 然后我可以打电话CreateCommand,这将让我嘲笑IDbCommand
  3. 然后我可以打电话ExecuteReader,这将让我嘲笑IDataReader

我现在想在模拟上执行其他设置IDataReader,例如让它trueRead()调用时返回.

从我所读到的,我应该Freeze用于此:

var dataReaderMock = fixture.Freeze<Mock<IDataReader>>();

dataReaderMock.Setup(dr => dr.Read())
                      .Returns(true);
Run Code Online (Sandbox Code Playgroud)

这似乎不符合我的期望.当我打电话时IDbCommand.ExecuteReader,我会得到一个与我刚冻结/设置的读者不同的读者.

这是一个例子:

var fixture = new Fixture().Customize(new AutoMoqCustomization());

var dataReaderMock = fixture.Freeze<Mock<IDataReader>>();
dataReaderMock.Setup(dr => dr.Read())
              .Returns(true);

//true - Create<IDataReader> retrieves the data reader I just mocked
Assert.AreSame(dataReaderMock.Object, fixture.Create<IDataReader>());

//false - IDbCommand returns a different …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq autofixture automoq

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

带锁的单例属性如何确保线程安全?

我很少使用单身人士,在这种情况下它是合适的.在尝试调查其最佳实现时,我遇到了一些代码,这让我相信我不正确地理解括号是如何封装"范围"的.

public sealed class Singleton
{
    private static Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            lock (padlock)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }
} 
Run Code Online (Sandbox Code Playgroud)

我很困惑当我尝试访问"实例"时会发生什么.假设我正在处理日志单例(我对单例的有用应用程序),它有一个方法"WriteLine(string line)"

我打电话的时候:

Singleton.Instance.WriteLine("Hello!");
Run Code Online (Sandbox Code Playgroud)

它在执行"WriteLine?"的整个方法时保持锁定.

如果我将实例分配给外部变量,例如:

Singleton Console = Singleton.Instance;
Run Code Online (Sandbox Code Playgroud)

现在有一个对单身人士之外的单身人士的不断引用.难道Console.WriteLine("Hello!")也是完全线程安全的喜欢Singleton.Instance.WriteLine("Hello!")

无论如何,我只是混淆了如何使单例线程安全,以及在显式访问属性时它是否只是线程安全.我想Singlton.Instance.WriteLine("...")先将实例拉出,从而保留锁的范围,然后WriteLine在返回的实例上执行,因此在释放锁之后执行写操作.

任何帮助,以清除我对如何理解这些功能的误解.

c# singleton multithreading design-patterns locking

5
推荐指数
2
解决办法
1369
查看次数

用于单子的 K/Kestrel 组合器?

implicit class KComb[A](a: A) {
  def K(f: A => Any): A = { f(a); a }
}
Run Code Online (Sandbox Code Playgroud)

鉴于 K 组合器的这种实现,我们可以在应用副作用的同时链接一个值的方法调用,而无需临时变量。例如:

case class Document()
case class Result()

def getDocument: Document = ???
def print(d: Document): Unit = ???
def process(d: Document): Result = ???

val result = process(getDocument.K(print))
// Or, using the thrush combinator
// val result = getDocument |> (_.K(print)) |> process
Run Code Online (Sandbox Code Playgroud)

现在,我需要做一些类似的事情,但改用 IO monad。

def getDocument: IO[Document] = ???
def print(d: Document): IO[Unit] = ???
def process(d: Document): IO[Result] …
Run Code Online (Sandbox Code Playgroud)

monads functional-programming scala combinators higher-order-functions

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

具有相同字段的两个记录上的模式匹配

说我有这个记录:

type alias Rec = { a : Int }
Run Code Online (Sandbox Code Playgroud)

并且,例如,一个函数,它接受其中两个并求和它们的整数.

f: Rec -> Rec -> Int
Run Code Online (Sandbox Code Playgroud)

这可以使用记录访问器(即f x y = x.a + y.a)实现,但有没有办法使用模式匹配来提取两个整数?

显然,这两个不起作用,因为它们将两个不同的数字绑定到同一个变量:

f {a} {a} = a + a

f x y = case (x, y) of ({a}, {a}) -> a + a
Run Code Online (Sandbox Code Playgroud)

functional-programming record elm

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