小编Sai*_*ino的帖子

从String转换为<T>

我真的应该能够得到这个,但我只是觉得它更容易问.

在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)

c# xml generics

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

XML序列化很慢

我继承了一个项目,其中应用程序的数据模型是一个XML文档.我之前的开发人员已经基于这个xml的模式创建了一个对象模型,然后针对对象模型进行编码.

经过几年的维护,这个应用程序逐渐开始显示它的时代.该团队负责人表示,这背后的关键原因是由于xml序列化的"缓慢".我很想在这上面打电话给BS,但是我们处理的许多xml文件都超过了2MB,并且记住了带有标记对象的幕后工作的基础知识[Serializable],2MB很多都要反映出来缓慢理论可能有些道理.

根据您的经验,序列化真的如此"慢"/糟糕,以至于选择XML - > XPath模型而不是XML - > POCO模型?

BTW这是一个.NET 2.0项目,我们的客户可能会在明年晚些时候升级到.NET 3.5.

serialization design-patterns xml-serialization

6
推荐指数
2
解决办法
3506
查看次数

Objective-C timespan

在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的方法方面一直不太理想.

有什么建议?

datetime timespan objective-c nsdate

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

Synchronization.Context 在 Post 上为 null,但在 Send 上不为 null

我正在尝试对使用 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,正如您期望的异步调用那样。

我想我想理解的是,当我告诉同步上下文执行一个函数时,无论是同步还是异步,我都希望保留该上下文。它保留用于同步调用,但不适用于异步调用。

为什么会出现这种行为,我该如何在单元测试中补偿它?

.net c# unit-testing synchronizationcontext

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