我真的应该能够得到这个,但我只是觉得它更容易问.
在C#函数中:
public static T GetValue<T>(String value) where T:new()
{
//Magic happens here
}
Run Code Online (Sandbox Code Playgroud)
什么是魔法的好实现?这背后的想法是我要解析xml并且所需的值通常是基元(bool,int,string等),这是使用泛型的完美地方......但是一个简单的解决方案目前正在躲避我.
顺便说一下,这是我需要解析的xml示例
<Items>
<item>
<ItemType>PIANO</ItemType>
<Name>A Yamaha piano</Name>
<properties>
<allowUpdates>false</allowUpdates>
<allowCopy>true</allowCopy>
</properties>
</item>
<item>
<ItemType>PIANO_BENCH</ItemType>
<Name>A black piano bench</Name>
<properties>
<allowUpdates>true</allowUpdates>
<allowCopy>false</allowCopy>
<url>www.yamaha.com</url>
</properties>
</item>
<item>
<ItemType>DESK_LAMP</ItemType>
<Name>A Verilux desk lamp</Name>
<properties>
<allowUpdates>true</allowUpdates>
<allowCopy>true</allowCopy>
<quantity>2</quantity>
</properties>
</item>
</Items>
Run Code Online (Sandbox Code Playgroud) 我继承了一个项目,其中应用程序的数据模型是一个XML文档.我之前的开发人员已经基于这个xml的模式创建了一个对象模型,然后针对对象模型进行编码.
经过几年的维护,这个应用程序逐渐开始显示它的时代.该团队负责人表示,这背后的关键原因是由于xml序列化的"缓慢".我很想在这上面打电话给BS,但是我们处理的许多xml文件都超过了2MB,并且记住了带有标记对象的幕后工作的基础知识[Serializable]
,2MB很多都要反映出来缓慢理论可能有些道理.
根据您的经验,序列化真的如此"慢"/糟糕,以至于选择XML - > XPath模型而不是XML - > POCO模型?
BTW这是一个.NET 2.0项目,我们的客户可能会在明年晚些时候升级到.NET 3.5.
在C#中,如果我想将字符串解析为日期和时间跨度,我会做类似以下的事情:
String input = "08:00";
DateTime time;
if (!DateTime.TryParse(input, out time))
{
// invalid input
return;
}
TimeSpan timeSpan = new TimeSpan(time.Hour, time.Minute, time.Second);
Run Code Online (Sandbox Code Playgroud)
我的Google-Fu在寻找将其转换为Objective-C的方法方面一直不太理想.
有什么建议?
我正在尝试对使用 Prism 事件聚合器的应用程序中的某些行为进行单元测试。我尝试进行单元测试的代码所做的一件事是订阅 UI 线程上的事件。深入研究EventAggregator 的实现,我发现它是通过SynchronizationContext.Post
.
我认为这个答案可能是一个很好的解决方法,但我最终使用了一个更简单的修复方法:在单元测试开始时显式设置同步上下文 - 在您尝试阅读之前一直有效SynchronizationContext.Current
这导致我的行为我并不完全理解:
//set the sync context
var thisSyncContext = new SynchronizationContext();
SynchronizationContext.SetSynchronizationContext(thisSyncContext);
thisSyncContext.Post(cb => {
var ctx = SynchronizationContext.Current; //<-- this is null
var equals = thisSyncContext.Equals(ctx); //<-- this is false
},null);
thisSyncContext.Send(cb => {
var ctx = SynchronizationContext.Current; //<-- this is not null
var equals = thisSyncContext.Equals(ctx); //<-- this is true
}, null);
Run Code Online (Sandbox Code Playgroud)
我知道 Post 是异步发生的,Send 是同步发生的,当我在线程调试窗口中观察它时,它实际上会切换到不同的线程 ID,正如您期望的异步调用那样。
我想我想理解的是,当我告诉同步上下文执行一个函数时,无论是同步还是异步,我都希望保留该上下文。它保留用于同步调用,但不适用于异步调用。
为什么会出现这种行为,我该如何在单元测试中补偿它?
c# ×2
.net ×1
datetime ×1
generics ×1
nsdate ×1
objective-c ×1
timespan ×1
unit-testing ×1
xml ×1