小编Tim*_*uin的帖子

什么是 C# 对象模式匹配?

我知道 C# 中的模式匹配类似于:

if (x is TypeY y)
{
  // do thing...
}
Run Code Online (Sandbox Code Playgroud)

这或多或少相当于:

if (x is TypeY)
{
  var y = (TypeY)x;
  // do thing...
}
Run Code Online (Sandbox Code Playgroud)

但是,我在编写 IntelliSense 建议的代码时发现了一些东西。我有以下代码:

if (top is { } t)
{
  // do stuff if 'top' is NOT NULL
}
Run Code Online (Sandbox Code Playgroud)

本来我以为我能做到if (top is not null t),结果却做不到;然后我转向if (top is int t),就在那时我提出了这个建议。这是什么意思?它是如何工作的?我只在 switch 语句中的模式匹配方面见过它,例如:

class Point
{
  public int X { get; set; }
  public int Y { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# casting pattern-matching

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

你怎么能在循环中多线程方法花费很多时间?

我正在研究一些代码,其目标是连接到API以获取用户名.

目前,我让代码在循环中工作,这就产生了运行时问题.每个"用户名列表"可以是数千个,这可能需要数小时才能获得所有这些.我的目标是找出如何使其成为线程,以允许一次多次查找.

这是我的代码,以及理解它所需的重要信息:

using Newtonsoft.Json.Linq;

public List<LeaderboardItem> LeaderboardList;
public LeaderboardItem LBItem;
public GetNames getNames;

public GetLeaderboardRuns(string GameCode, string Category, string Query)
{
    LeaderboardList = new List<LeaderboardItem>();

    var Client = new WebClient();

    try
    {
        var Data = Client.DownloadString($"{URL.BaseUrl}/leaderboards/{GameCode}/category/{Category}{Query}");

        foreach (var item in (JArray)JObject.Parse(Data)["data"]["runs"])
        {
            int place = (int)item["place"];

            // This next line looks up the username on the API.
            // This code takes several seconds per loop to complete.
            // It is returned as a list of strings.
            getNames = new …
Run Code Online (Sandbox Code Playgroud)

c# multithreading json.net

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

GestureRecognizer 不适用于带有 DataTemplate 的 CollectionView

我正在使用 GestureRecognizers 在 Xamarin 中玩耍,我有以下代码:

<CollectionView
  Grid.Row="0"
  EmptyView="No player information"
  ItemsSource="{Binding Voices, Mode=OneWay}">

  <CollectionView.GestureRecognizers>
    <TapGestureRecognizer
      Command="{Binding CommandPlayerTapped}"
      CommandParameter="hi"
      NumberOfTapsRequired="1" />
  </CollectionView.GestureRecognizers>

  <CollectionView.ItemTemplate>
    <DataTemplate>

      <StackLayout>
        <views:PancakeItemView Margin="5" BorderColor="Black">
          <views:VoiceInfoContainerView Style="{StaticResource VoiceDisplayStyle}" />
        </views:PancakeItemView>
      </StackLayout>

    </DataTemplate>
  </CollectionView.ItemTemplate>
</CollectionView>
Run Code Online (Sandbox Code Playgroud)

MyTapGestureRecognizer绑定到一个简单的命令,它会弹出一个消息;没什么复杂的。DataTemplate 是一个 PancakeView 包装一个简单的视图来显示一些名称,如下所示:

显示视图的屏幕截图

同样,这并不复杂,但是,我觉得这可能是问题所在,因为我在网上找不到任何其他信息。

我尝试将手势代码放在其他元素中,但没有成功。关于为什么点击这些视图无法触发命令的任何想法?

c# xaml gesture xamarin xamarin.forms

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