在Firefox上的JavaScript中,Uint8Array在控制台上显示如下console.log
:
Uint8Array […]
0: 131
1: 165
2: 116
3: 111
4: 112
Run Code Online (Sandbox Code Playgroud)
如何将其显示为十六进制值,如下所示:
Uint8Array […]
0: 0x83
1: 0xa5
2: 0x74
3: 0x6f
4: 0x70
Run Code Online (Sandbox Code Playgroud)
我正在尝试调试一些websocket通信,并且必须在格式规范中查找仅列出十六进制值的字节.
在一个简单的 MVVM 应用程序中,我可以添加对视图中某些属性的绑定。该属性可以访问另一个对象并从中返回属性值。假设我想在视图中显示活动项目。如果没有项目处于活动状态,则应显示特殊注释。
现在,当项目重命名时,名称应该在视图中更新。如果我只是在属性中返回项目名称,它当然不会更新。
所以我想我可以将视图绑定到属性中创建的另一个绑定,该绑定应该转发 PropertyChanged 事件并相应地更新视图。但我看到“System.Windows.Data.Binding”,而不是像“Project: XYZ”这样的绑定的预期结果。
该项目可以在任何地方重命名,因此我想避免从那里自己引发此 ViewModel 的 PropertyChanged 事件。事情本身应该更聪明一点,而不需要从各处推动(当事情变得更加复杂时,你经常会忘记至少一次)。
这是代码:
XAML 视图:
<TextBlock Text="{Binding ActiveProjectName}"/>
Run Code Online (Sandbox Code Playgroud)
C# 视图模型:
public object ActiveProjectName
{
get
{
if (ActiveProject != null)
{
// This works but won't update automatically:
//return "Project: " + ActiveProject.Name;
// This does not work at all:
return new Binding("Name")
{
Source = ActiveProject,
StringFormat = "Project: {0}"
};
}
return "(No active project)";
}
}
Run Code Online (Sandbox Code Playgroud)
这有可能吗?它是如何正确运作的?
我发现Assert
课程方法相当混乱而不是有用.我觉得特别恼人的是微软的MSTest方法期望(或要求?)我向后写比较,i.即 首先是常量/期望值,第二个是变量/实际值.这与自然语言相矛盾,因此与代码中的一般比较的许多编程指南相矛盾.
所以不是这样的:
Assert.AreEqual(5, value, "Value is not correct.");
Run Code Online (Sandbox Code Playgroud)
这有什么问题,看起来更通常的测试指令:
if (value != 5) Assert.Fail("Value is not correct.");
Run Code Online (Sandbox Code Playgroud)
这就是所有代码的样子.这是每个程序员的眼睛训练,以便快速看到和理解.其他断言方法可以很容易地用常规代码编写.
使用C#6,using static
你甚至可以放弃这Assert.
部分.
我在网上和Assert类文档中找不到任何关于此的理由.
有什么好方法可以测试一个decimal
值是否可以在double
不引发异常的情况下转换为字符串,并且最好在不转换为字符串或不从字符串进行解析的情况下进行转换?
我可以测试与long
或int
类型的兼容性,例如:(尚未测试)
if (value == decimal.Truncate(value))
{
if (value >= int.MinValue && value <= int.MaxValue)
return (int)value;
if (value >= long.MinValue && value <= long.MaxValue)
return (long)value;
return value.ToStringInvariant();
}
// Now try double, else revert to string again
Run Code Online (Sandbox Code Playgroud)
应该使用此方法将decimal
值序列化为可以发送到JavaScript的值。在这里,使用了MessagePack,但是JSON应该具有相同的约束。decimal
两者都不支持。
我总是可以按原样发送该值,string
但是我想节省一点带宽,并使用可以表示该值的最简单类型(精度很高)。
PS:这不能编译:
if (value >= double.MinValue && value <= double.MaxValue)
return (double)value;
Run Code Online (Sandbox Code Playgroud)
我比不上decimal
用double
。如果这是一条好的道路,那将是一个好的解决方案?
所以这不起作用:
public int BufferedCount => { lock (buffer) { return buffer.Count; } }
Run Code Online (Sandbox Code Playgroud)
第一个{
出乎意料.但我不知道为什么.
这也行不通:
public int BufferedCount => lock (buffer) { return buffer.Count; }
Run Code Online (Sandbox Code Playgroud)
buffer
是一个私有列表,必须防止来自多个线程的并行请求.该属性应该提供该列表的当前计数.
我想我最近在lock
某个地方看到了一个带有声明的表达式身体,但我无法弄清楚它的外观如何.
c# ×4
.net ×2
c#-6.0 ×1
data-binding ×1
decimal ×1
firefox ×1
javascript ×1
mvvm ×1
unit-testing ×1
wpf ×1
xaml ×1