小编Ken*_*art的帖子

使用默认参数和泛型的方法解决问题

使用.NET 4,我很困惑编译器无法解决下面示例中的第一个方法调用.

using System;

namespace MethodResolutionTest
{
    class Program
    {
        static void Main(string[] args)
        {
            NonGeneric foo = null;

            // ambiguous
            foo.Ext1(x => new NonGeneric());

            // resolves to first Ext1
            foo.Ext1(x => new NonGeneric(), 1);


            // resolves to first Ext2
            foo.Ext2(x => new NonGeneric());

            // resolves to first Ext2
            foo.Ext2(x => new NonGeneric(), 1);

            // resolves to second Ext2
            foo.Ext2(x => "foo");

            // resolves to second Ext2
            foo.Ext2(x => "foo", 1);


            // resolves to first Ext3
            foo.Ext3(x => new NonGeneric()); …
Run Code Online (Sandbox Code Playgroud)

.net c# generics overload-resolution default-parameters

12
推荐指数
1
解决办法
268
查看次数

是否存在使用Reactive UI订阅分层属性更改的模式?

假设我有以下视图模型:

public class AddressViewModel : ReactiveObject
{
    private string line;

    public string Line
    {
        get { return this.line; }
        set { this.RaiseAndSetIfChanged(x => x.Line, ref this.line, value); }
    }
}

public class EmployeeViewModel : ReactiveObject
{
    private AddressViewModel address;

    public AddressViewModel Address
    {
        get { return this.address; }
        set { this.RaiseAndSetIfChanged(x => x.Address, ref this.address, value); }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在假设EmployeeViewModel我希望公开一个具有最新值的属性Address.Line:

public EmployeeViewModel()
{
    this.changes = this.ObservableForProperty(x => x.Address)
        .Select(x => x.Value.Line)
        .ToProperty(this, x => x.Changes);
} …
Run Code Online (Sandbox Code Playgroud)

c# wpf mvvm system.reactive reactiveui

10
推荐指数
1
解决办法
2135
查看次数

iOS:正确地将视图引入已经可见的父级

我有以下代码将子视图控制器采用到父级:

public static void AdoptViewController(this UIViewController parent, UIViewController child)
{
    parent.AddChildViewController(child);
    parent.View.AddSubview(child.View);
    child.DidMoveToParentViewController(parent);
}
Run Code Online (Sandbox Code Playgroud)

除非父视图已经可见,否则这种方法大多正常.在这种情况下,子视图控制器不会收到ViewWillAppear事件.这会导致整个应用程序出现连锁问题.

我发现这篇帖子,建议这样做:

public static void AdoptViewController(this UIViewController parent, UIViewController child)
{
    parent.AddChildViewController(child);

    child.BeginAppearanceTransition(true, false);
    parent.View.AddSubview(child.View);
    child.EndAppearanceTransition();

    child.DidMoveToParentViewController(parent);
}
Run Code Online (Sandbox Code Playgroud)

但是,这会导致在ViewWillAppear父级尚未显示的情况下将事件提升两次.我重新编写了一些代码:

public static void AdoptViewController(this UIViewController parent, UIViewController child)
{
    parent.AddChildViewController(child);

    // could also use ViewIfLoaded for later iOS versions
    var parentAlreadyVisible = parent.IsViewLoaded && parent.Window != null;

    if (parentAlreadyVisible)
    {
        child.BeginAppearanceTransition(true, false);
    }

    parent.View.AddSubview(child.View);

    if (parentAlreadyVisible)
    {
        child.EndAppearanceTransition();
    }

    child.DidMoveToParentViewController(parent);
} …
Run Code Online (Sandbox Code Playgroud)

c# ios xamarin

10
推荐指数
0
解决办法
291
查看次数

3D音频引擎

尽管3D图形引擎取得了很大的进步,但令人感到奇怪的是,音频没有得到同样的关注.现代游戏可以实时渲染3D场景,但我们仍然可以获得与这些场景相关的或多或少的预先录制的音频.

想象一下 - 如果你愿意的话 - 一个3D引擎不仅可以模拟物品的物理外观,还可以模拟它们的音频属性.从这些模型中,它可以根据接触到的材料,速度,与虚拟耳朵的距离等动态生成音频.现在,当你蹲在沙袋后面,子弹飞过你的头上时,每一个都会产生一种独特而逼真的声音.

这种技术的明显应用是游戏,但我确信还有很多其他的可能性.

这种技术是否正在积极开发?有谁知道任何试图实现这一目标的项目?

谢谢,肯特

audio platform-agnostic

9
推荐指数
1
解决办法
2572
查看次数

sqlite_stat1表的说明

我正在尝试诊断特定查询对SQLite的速度慢的原因.似乎有很多关于查询优化器如何工作的信息,但关于如何实际诊断问题的信息很少.

特别是,当我分析数据库时,我得到了预期的sqlite_stat1表,但我不知道stat列告诉我什么.示例行是:

MyTable,ix_id,25112 1 1 1 1
Run Code Online (Sandbox Code Playgroud)

"25112 1 1 1 1"究竟是什么意思?

作为一个更广泛的问题,有没有人有关于诊断SQLite查询性能的最佳工具和技术的任何好资源?

谢谢

sql sqlite indexing performance

9
推荐指数
1
解决办法
3860
查看次数

log4net LogicalThreadContext不起作用

我有什么是log4net中的错误,或者是我的误解.

我正在尝试将LogicalThreadContext一些数据与调用上下文相关联,并将其传播到该上下文中任何线程所做的任何日志语句.这是声称的优势LogicalThreadContextThreadContext.

我无法让传播工作,所以我整理了一个简单的单元测试,看看它是否可行,但事实并非如此.这里是:

[Fact]
public void log4net_logical_thread_context_test()
{
    XmlConfigurator.Configure();
    var log = LogManager.GetLogger(GetType());
    var waitHandle = new ManualResetEvent(false);

    using (LogicalThreadContext.Stacks["foo"].Push("Some contextual info"))
    {
        log.Debug("START");

        ThreadPool.QueueUserWorkItem(delegate
        {
            log.Debug("A DIFFERENT THREAD");
            waitHandle.Set();
        });

        waitHandle.WaitOne();
        log.Debug("STOP");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的log4net配置如下所示:

<?xml version="1.0" encoding="utf-8" ?>

<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>

    <log4net>
        <appender name="FileAppender" type="log4net.Appender.FileAppender">
            <file value="log.txt" />
            <appendToFile value="true" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="[%thread]|[%property{foo}]|%message%newline"/>
            </layout>
        </appender>

        <root>
            <level value="DEBUG" />
            <appender-ref ref="FileAppender" />
        </root>
    </log4net>
</configuration> …
Run Code Online (Sandbox Code Playgroud)

.net log4net multithreading

9
推荐指数
1
解决办法
5180
查看次数

如何在WPF应用程序中从相对路径加载?

我正在读取一个xml文件,并希望根据应用程序的位置从相对目录创建它,类似于使用Server.MapPath的ASP.NET或使用tilda.

如何在WPF中获得相对路径?

WORKS: XDocument xmlDoc = XDocument.Load(@"c:\testdata\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~\Data\customers.xml");
DOES NOT WORK: XDocument xmlDoc = XDocument.Load(@"~/Data/customers.xml");
Run Code Online (Sandbox Code Playgroud)

c# windows path

8
推荐指数
2
解决办法
3万
查看次数

交互式建筑图工具

是否有任何工具可以让我轻松创建交互式架构图?

我设想能够在高层次上查看架构的图形描述.然后,我就可以点击该架构的特定部分并钻入其中,从而揭示该部分的更详细的细分.然后,该过程可以根据需要继续进行多个级别.

有谁知道允许我创造这种体验的任何工具?或者我应该尝试使用Visio/Powerpoint来实现这一目标?

architecture diagram interactive

8
推荐指数
1
解决办法
4617
查看次数

规范化MSBuild中的项目列表

我正在尝试获取项目根目录下的所有单元测试程序集的列表.我可以这样做:

<CreateItem Include="**\bin\**\*.UnitTest.*.dll">
   <Output TaskParameter="Include" ItemName="Items"/>
</CreateItem>
Run Code Online (Sandbox Code Playgroud)

但是,由于它们存在于多个子目录中,因此会多次找到相同的DLL.有没有一种简单的方法让我根据项目元数据(即文件名和扩展名)进行规范化,以便获得一个唯一的单元测试DLL列表?或者我是否必须编写自己的任务?

msbuild unique normalize distinct

7
推荐指数
2
解决办法
2583
查看次数

使用TPL进行任务组合和错误处理

我有一个具有以下结构的方法:

public Task InitializeAsync()
{
    var taskCompletionSource = new TaskCompletionSource<bool>();

    Task firstTask = ...;

    // secondTask calls taskCompletionSource.TrySetResult(true) once it considers itself "done"
    Task secondTask = firstTask.ContinueWith(..., TaskContinuationOptions.OnlyOnRanToCompletion);

    Action<TasK> errorContinuation = x =>
        {
            taskCompletionSource.SetException(e.Exception);
        };

    firstTask.ContinueWith(errorContinuation, TaskContinuationOptions.OnlyOnFaulted);
    secondTask.ContinueWith(errorContinuation, TaskContinuationOptions.OnlyOnFaulted);

    return taskCompletionSource.Task;
}
Run Code Online (Sandbox Code Playgroud)

重要的:

  • InitializeAsyncsecondTask决定之前,返回的任务不会被视为完成
  • secondTask只有firstTask成功才会运行
  • 任何一个失败firstTasksecondTask导致整个任务失败

我想知道的是,在实现相同的功能的同时,是否有更简洁的方式来表达这一点.我正在使用.NET 4.0,但我对4.5是否也使这更容易感兴趣.

.net c# task-parallel-library

7
推荐指数
1
解决办法
2235
查看次数