小编Mat*_*lay的帖子

通用列表或不同类型的字典

我想要一个将字符串映射到不同类型的通用列表的Dictionary.即以下列形式:

Key        Value
string     List<T>
string     List<U>
string     List<V>
string     List<U>
...

目前我正在使用a Dictionary<string, IList>然后从每个字典KeyValuePair<string, IList> pair条目中提取强类型列表,如下所示:

Type layerType = pair.Value.GetType().GetGenericArguments()[0];
List<layerType> objectsClicked = pair.Value as List<layerType>;
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

[编辑]正如已经注意到的,上面的内容没有编译,道歉 - 这就是当你在做某些事情的时候提出问题时所得到的.更多解释.我正在制作一个基本的空间数据查看器.最终视图由一组Layer<T>s组成.每个图层都提供一个委托来呈现其类型(给定偏移量和比例)以及检查其对象在当前窗口中的方式.对于命中测试,我希望每个图层的列表都被击中了对象.这份名单将是List<Point>一个Point层,等等......从所有命中的分组Layer<T>s就那么是强类型列表的集合.

c#

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

System.Reactive.Joins指南

我正在寻找System.Reactive.Joins的介绍/一些文档,其中包括Pattern,Plan,QueryablePattern和QueryablePlan类.谷歌不打开任何东西("System.Reactive.Joins"),MSDN有什么,有没有样品这里,并从优秀的资源,这个问题并不包括该命名空间.

有人有指点吗?

c# system.reactive

20
推荐指数
2
解决办法
2659
查看次数

如何锁定sqlite数据库?

过去我们遇到过一个问题,即流氓进程阻止了sqlite数据库.我已经写了一些代码来通知我们是否发生这种情况,但需要对其进行测试.

我怎么能故意锁定一个sqlite数据库,以便我可以检查一下我是否可以检查它是否被锁定了?

sqlite

15
推荐指数
1
解决办法
5010
查看次数

Task.Delay永远不会完成

以下代码将永远冻结.

public async Task DoSomethingAsync()
{
    await Task.Delay(2000);
}

private void Button_Click(object sender, RoutedEventArgs e)
{
    DoSomethingAsync().Wait();
    // Task.Delay(2000).Wait();
}
Run Code Online (Sandbox Code Playgroud)

如果我DoSomethingAsync使用注释掉的代码切换调用,它的行为与预期一致.我怀疑嵌套等待导致死锁,但我不知道为什么,或者如何解决它.

.net c# delay task-parallel-library async-await

14
推荐指数
1
解决办法
3290
查看次数

使SortedList只读

我经常将列表暴露为ReadOnlyCollection<T>s,即

public class Class
{
  List<string> list;

  public ReadOnlyCollection<string> TheList
  {
    get { return list.AsReadOnly(); }
  }
}
Run Code Online (Sandbox Code Playgroud)

什么是一个做到这一点的最好办法IDictionary<T,U>,如SortedList<string, string>

c# dictionary sortedlist

5
推荐指数
1
解决办法
2299
查看次数

一个类中的boost :: thread

我正在尝试创建一个类,在创建时,启动一个后台线程,类似于下面的:

class Test
{
  boost::thread thread_;
  void Process()
  {
    ...
  }

  public:
    Test()
    {
       thread_ = boost::thread(Process);
    }
}
Run Code Online (Sandbox Code Playgroud)

我无法编译,错误是"没有匹配函数调用boost :: thread :: thread(未解析的函数类型)".当我在课外做这件事时,它运作正常.如何让函数指针起作用?

c++ boost-thread

5
推荐指数
1
解决办法
5498
查看次数

如何使用app.config阻止TextWriterTraceListener附加?

我正在使用System.Diagnostics.TraceSource进行日志记录,我的一个侦听器是TextWriterTraceListener.在跟踪引物中,它将其设置如下:

<listeners>
  <add initializeData="output.txt" 
       type="System.Diagnostics.TextWriterTraceListener"
       name="myLocalListener" />
</listeners>
Run Code Online (Sandbox Code Playgroud)

问题是这将始终附加到output.txt.如何在配置文件中将其更改为覆盖?

以编程方式我想要的听众是:

new TextWriterTraceListener(new StreamWriter("output.txt", false));
Run Code Online (Sandbox Code Playgroud)

c# logging app-config tracesource

5
推荐指数
1
解决办法
2699
查看次数

具有无效扩展的流算术

我目前正在研究一种通过方程组合多个数据流的应用程序.我希望能做的是:

var result = (stream1 + stream2) / stream3 + stream4 * 2;
Run Code Online (Sandbox Code Playgroud)

result更新,只要任何流的更新.目前,我在Rx中表达这一点的唯一方法是:

var result = stream1.CombineLatest(stream2, (x,y) => x+y)
  .CombineLatest(stream3, (x,y) => x / y)
  .CombineLatest(stream4, (x,y) => x + y*2);
Run Code Online (Sandbox Code Playgroud)

这几乎不是那么清楚.

我目前的想法如下:

Public class ArithmeticStream : IObservable<double>
{
    public static ArithmeticStream operator +(ArithmeticStream xx, ArithmeticStream yy)
    {
        return Observable.CombineLatest(xx,yy, (x,y) => x + y);
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

问题是CombineLatest返回一个IObservable<double>而不是ArithmeticStream.

两个可能的问题:

如何透明地将其IObservable<double>转换为ArithmeticStream?

有没有一条替代路线可以让我得到我想要的结果?

c# system.reactive

5
推荐指数
1
解决办法
222
查看次数

在protobuf列表的开头插入一个项目

我正在尝试在protobuf消息列表的开头插入一个项目.add_foo将项目追加到结尾.有一种简单的方法可以在开头插入它吗?

c++ list protocol-buffers

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

如何从unix使用protobuf-csharp-port

我们一直在使用协议缓冲区,并使用protoc生成c ++和python文件,使用protobuf-csharp-port生成c#文件.目前这些是单独完成的,来自linux的c ++和python以及来自windows的c#.我们希望有一个脚本生成所有这些,在linux中运行.

要做到这一点,我试图用单声道运行ProtoGen.exe,但它不会产生任何输出.运行以下命令,但不生成cs文件,也没有错误.

mono ../cs/Packages/Google.ProtocolBuffers/tools/ProtoGen.exe --protoc_dir=/usr/local/bin/ ./subdir/simple_types.proto
Run Code Online (Sandbox Code Playgroud)

我有一种感觉,我错过了一些简单的东西.

linux mono protocol-buffers

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

DataGrid 中的自定义单击行为

我有一个显示自定义数据类型内容的数据网格。

<DataGrid Name="TestGrid" ItemsSource="{Binding Source={StaticResource Data}}" AutoGenerateColumns="False">
  <DataGrid.Columns>
    <DataGridTextColumn Header="Value 1" Binding="{Binding Value1, StringFormat={}{0:C}}"/>
    <DataGridTextColumn Header="Value 2" Binding="{Binding Value2, StringFormat={}{0:#.00}}"/>
  </DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

我想将不同的命令绑定到每个 DataGridTextColumn 的 MouseLeftButtonDown 和 MouseRightButtonDown 事件。我可以使用 DataGridTemplateColumn 的 CellEditingTemplate 对输入进行一些自定义,但无法弄清楚如何获得我想要的行为。

编辑:我的目标是左键单击增加值,右键单击减少值,+/- 的大小会因列而异。

编辑2:似乎您可以使用触发器根据鼠标事件更改样式,但这似乎不适用于更改数据本身。我倾向于放弃数据网格并使用 ListView

c# wpf datagrid mouseevent

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