小编Gig*_*igi的帖子

将ViewModel置于代码隐藏中是不对的?

在MVVM中,我们通常有一个View(XAML +通常是空代码隐藏)以及一个单独的ViewModel.View和ViewModel之间的交互通过数据绑定进行.

假设View只是XAML并且其代码隐藏是空的(通常就是这种情况),使用代码隐藏本身作为ViewModel并将View绑定到代码隐藏的属性是否有任何问题?关注点的分离仍然存在 - 您有一个纯XAML视图和一个ViewModel,它是代码隐藏,它们只通过数据绑定相互通信.ViewModel仍然可以进行单元测试.

这听起来像是异端邪说,但是当代码隐藏实际上是空的时候,我无法想到任何可以证明必须为ViewModel创建单独类的用例.

wpf xaml code-behind mvvm

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

使用带有"异步"的旧异步模式结束方法名称是不好的做法吗?

在最近的异步/等待模式中,建议使用"Async"结束方法名称,例如" GetAsync() ".

现在假设我使用旧的异步模式,即具有Begin/End方法对的模式IAsyncResult.我有一个方法来包装对该方法的调用,例如:

public void SendAsync(byte[] data)
{
    this.stream.BeginWrite(...);
}
Run Code Online (Sandbox Code Playgroud)

还假设EndWrite传递给的方法BeginWrite对于所有数据都是相同的,即它将是同一类中的方法.

在这种情况下,命名此方法是错误的,SendAsync()因为它可能与新的异步模式混淆?

.net c# asynchronous

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

流刷新与 FlushAsync

除了Flush()方法,我注意到Stream类还有一个FlushAsync()方法。在什么情况下您会使用FlushAsync()方法?刷新缓冲区是否如此昂贵以保证异步运行它?

c# asynchronous

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

如何结束Redis监控

在Redis中,有一个MONITOR命令非常方便地查看正在处理的所有命令。

一旦开始监视,是否有任何方法可以停止同一会话的监视?

如果终止连接,监视是否结束(与服务器上继续进行的资源密集型监视相反)?

redis

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

如何使用RedisValue []将数组传递给StackExchange.Redis方法?

我想打电话给IDatabase.SortedSetAsync(StackExchange.Redis).此方法的签名是:

Task<bool> SortedSetRemoveAsync(RedisKey key, RedisValue member,
        CommandFlags flags = CommandFlags.None);
Task<long> SortedSetRemoveAsync(RedisKey key, RedisValue[] members,
        CommandFlags flags = CommandFlags.None);
Run Code Online (Sandbox Code Playgroud)

传递一个隐式转换为RevisValue的值(例如字符串)没有问题.但是,如果我尝试传入数组...

var key = "MYKEY";
var values = new string[] { "A", "B", "C" };

await database.SortedSetRemoveAsync(key, values);
Run Code Online (Sandbox Code Playgroud)

...然后编译器不知道如何将字符串[]转换为RedisValue [].

我管理转化的唯一方法是进行每项转化:

var values2 = values.Select(s => (Redisvalue) s).ToArray();
await database.SortedSetRemoveAsync(key, values2);
Run Code Online (Sandbox Code Playgroud)

......我不确定这是否是最佳方式.

很奇怪,当存在期望数组的API方法时,传递数组是如此困难...... 单元测试通过传入一个空的RedisValue []数组并完全绕过问题来实现简单方向.

将数组参数传递给接受RedisValue []数组的StackExchange.Redis方法的推荐方法是什么?

c# arrays redis stackexchange.redis

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

将DateTime转换为UTC时,调整规则是什么?

在MSDN页面中TimeZoneInfo.ConvertTimeToUtc(),有以下信息框:

如果当前计算机的本地时区包含多个调整规则,则ConvertTimeToUtc方法的此重载可以返回与TimeZone.ToUniversalTime和DateTime.ToUniversalTime方法不同的结果.无论dateTime是否在其日期范围内,TimeZone.ToUniversalTime始终将当前调整规则应用于时区转换.在.NET Framework 3.5上执行时,DateTime.ToUniversalTime也会将当前调整规则应用于时区转换,无论dateTime是否位于其日期范围内.

我不确定我明白这意味着什么.这些是什么调整规则,以及如何将结果之间的差异ConvertTimeToUtc()TimeZone.ToUniversalTime()

c# timezone datetime utc

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

为什么对散列密码加盐会提高安全性?

我一直在做一些关于在数据库中安全存储密码的研究。通常建议您使用盐。正如Secure hash and salt for PHP passwords中的一个答案所解释的那样,这会更改哈希值,使密码更难以破解。

作为验证机制的一部分,用户输入的密码与盐结合并根据需要进行散列。鉴于盐对用户是透明的,使用盐如何提供任何额外的好处?

在我看来,无论有没有散列,相同的密码都将成功验证您的身份,因为使其与众不同的管道将在幕后进行。这就是为什么到目前为止我读过的文章都没有澄清事情的原因。

security salt

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

WPF FlowDocument仅打印到小面积

我通过使用FlowDocument,FlowDocumentPaginator和PrintDialog在WPF中打印纯文本。我的方法基于本文,并且实现如下:

        var printDialog = new PrintDialog();
        if (printDialog.ShowDialog() == true)
        {
            var flowDocument = new FlowDocument();

            var paragraph = new Paragraph();
            paragraph.FontFamily = new FontFamily("Courier New");
            paragraph.FontSize = 10;
            paragraph.Margin = new Thickness(0);
            paragraph.Inlines.Add(new Run(this.textToPrint));

            flowDocument.FontSize = 10;
            flowDocument.Blocks.Add(paragraph);

            var paginator = ((IDocumentPaginatorSource)flowDocument).DocumentPaginator;
            printDialog.PrintDocument(paginator, "Chit");
        }
Run Code Online (Sandbox Code Playgroud)

这对于打印宽度较窄的东西很有用。但是,当我尝试打印一个长字符串时,它们全部塞在一个小区域中:

在此处输入图片说明

我在打印对话框PrintTicket和分页器中检查了尺寸,它们似乎还可以:

在此处输入图片说明

那么,是什么导致此问题,我该如何解决?

c# printing wpf flowdocument

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

你可以内联命名C#7元组项目吗?

默认情况下,使用C#7元组时,该项目将命名为喜欢的Item1,Item2等.

我知道你可以命名由方法返回的元组项.但是,您可以使用相同的内联代码,例如在以下示例中吗?

foreach (var item in list1.Zip(list2, (a, b) => (a, b)))
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

foreach我的身体中,我希望能够使用比和更好的东西访问最后的元组(包含ab).Item1Item2

c# tuples c#-7.0

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

获取带有NAudio的默认输出音频设备

我想使用NAudio获取默认输出音频设备(即我的扬声器),以获得此问题中的主音量.

我正在尝试使用MMDeviceEnumerator.GetDevice(),但它所需的ID是一个字符串,而不是设备号.这是我到目前为止编写的代码:

        var enumerator = new MMDeviceEnumerator();

        for (int i = 0; i < WaveOut.DeviceCount; i++)
        {
            var cap = WaveOut.GetCapabilities(i);
            Console.WriteLine("{0}: {1}", i, cap.ProductName);

            var device = enumerator.GetDevice(???);
        }

        Console.WriteLine();

        Console.ReadLine();
Run Code Online (Sandbox Code Playgroud)

我已经尝试从功能中传递各种Guids,以及以字符串格式传递设备ID,GetDevice()但它们都不起作用.

如何获取默认设备?

c# audio naudio

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