小编Ale*_*ese的帖子

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

类型T的表达不能由类型X的模式处理

我已将项目升级到目标C#7,并使用Visual Studio 2017 RC在我的解决方案中实现模式匹配.在执行此操作之后,引入了与通用参数的模式匹配相关的一些错误.

请考虑以下代码:

public class Packet
{
}

public class KeepalivePacket : Packet
{
}

public void Send<T>(T packet)
    where T : Packet
{
    if (packet is KeepalivePacket keepalive)
    {
        // Do stuff with keepalive
    }

    switch (packet)
    {
        case KeepalivePacket keepalivePacket:
            // Do stuff with keepalivePacket
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

无论是if语句和case声明产生一个编译错误.

类型为T的表达式不能由KeepalivePacket类型的模式处理

如果我首先转换参数以键入object模式匹配按预期工作.罗斯林然后将演员标记object为多余.

if ((object)packet is KeepalivePacket keepalive)
{
    // This works
}
Run Code Online (Sandbox Code Playgroud)

此错误仅适用于通用参数和变量.Roslyn似乎不知道这个问题,因为它建议更改代码以通过分析器使用模式匹配,并允许我应用"代码修复"导致代码损坏.

c# pattern-matching c#-7.0 visual-studio-2017

28
推荐指数
3
解决办法
5716
查看次数

我们可以在WPF MVVM中使用<i:Interaction.Triggers>(不在Silverlight中)

我可以<Interaction.Triggers />在WPF MVVM而不是Silverlight中使用.

我遇到的所有示例都显示了<Interaction.Triggers />在Silverlight中的使用.

我怎样才能在WPF中使用它?我正在使用MVVM模型.

c# wpf mvvm

21
推荐指数
1
解决办法
4万
查看次数

错误:JNI错误(app bug):访问陈旧的全局引用

我收到此错误 JNI ERROR(应用程序错误):访问陈旧的全局引用当我在Android OS v4中运行我的应用程序时,但是当我在Android v2.3中运行相同的应用程序时,我没有收到此错误.

这个错误发生在我调用AsyncTask类的地方,我将字符串数组作为参数传递

任何人都可以帮助我?

mono android monodevelop xamarin.android xamarin

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

Console.ReadKey与带有Timer的Console.ReadLine

以下代码是一个众所周知的示例,用于显示调试版本和发布版本之间的区别:

using System;
using System.Threading;

public static class Program
{
    public static void Main()
    {
        Timer t = new Timer(TimerCallback, null, 0, 2000);
        Console.ReadLine();
    }

    private static void TimerCallback(Object o)
    {
        Console.WriteLine("In TimerCallback: " + DateTime.Now);
        GC.Collect();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果使用调试配置运行此命令,则计时器将每两秒输出当前时间.这GC.Collect没有任何影响,因为编译器人为地延长了Timer t变量的寿命.在发布配置中,计时器只执行一次.该GC.Collect遗嘱垃圾收集t变量,就是这样.

一切都像它应该的那样.奇怪的是,当您将Console.ReadLine行更改为Console.ReadKey时,两个配置每两秒运行一次计时器.

Console.ReadKey和Console.ReadLine有什么区别?我从文档中了解到Console.ReadKey阻塞了发出ReadKey方法的线程.但是GC.Collect仍然会发射..

为什么Timer t通过阻塞主线程来延长生命周期?

更新

使用.NET 3.5时,不会发生此行为!

c# console multithreading garbage-collection timer

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

如何在C#中找到已安装应用程序的升级代码?

我正在使用WIX工具集中的Windows Installer API的C#包装器.我使用ProductInstallation该类获取有关已安装产品的信息,例如产品代码和产品名称.

例如

  • 产品名称 - "我的测试应用程序"
  • 产品代码 - {F46BA620-C027-4E68-9069-5D5D4E1FF30A}
  • 产品版本 - 1.4.0

在内部,这个包装器使用MsiGetProductInfo函数.不幸的是,此功能不会返回产品的升级代码.

如何使用C#检索已安装应用程序的升级代码?

c# registry windows-installer wix

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

F#on Mono for Android

我从Xamarin购买了Mono for Android,到目前为止我印象非常深刻,除非我真的想用F#代替C#.有没有人设法使用此工具运行F#?

f# android xamarin.android

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

如何在Monodroid中显示MessageBox

如何在Xamarin.Android中显示消息框?如何从消息框中获得是或否的响应?

- - 更新 :

myBtn.Click += (sender, e) => 
{
   new AlertDialog.Builder(this)
   .SetMessage("hi")
   .Show();
};
Run Code Online (Sandbox Code Playgroud)

c# android xamarin.android android-alertdialog

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

执行SQL存储过程并处理结果

在VB.NET中,我该如何做?

  1. 执行存储过程
  2. 通读返回的DataTable

t-sql vb.net stored-procedures sql-server-2008

9
推荐指数
2
解决办法
14万
查看次数

在bash中按多列排序

我有一个包含 2 列“名称”和“年龄”的文件,如下所示:

Alex,  15
Mary,  12
Alex,  28
Zoe,   16
Alex,  17
Run Code Online (Sandbox Code Playgroud)

我将按字母顺序按第一列排序,使用sort -t ',' -k1,1 filename.txt, 但如果有相同的名称,我希望第二列以它们在原始文件中的相反方式排序,如下所示:

Alex,  17
Alex,  28
Alex,  15
Mary,  12
Zoe,   17
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

linux sorting bash reverse alphabetical

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