小编Ili*_*hev的帖子

C# 8 用于 void 方法的 switch 表达式

我知道C# 8 switch expression返回值或属性匹配的方法的语法。但是如果我们只需要打开一个字符串值并执行一个不返回任何内容(没有返回类型/void)的方法,那么我们该怎么做呢?我正在考虑某种形式的 Func 但不确定确切的语法。我知道我们可以用常规的 case 语句用旧的方式来做,但试图看看我们是否可以用新的语法实现同样的效果。

这是问题的例子

switch (stringvalue)
{
    case "Add": Add(); break;
    case "Subtract": Subtract(); break;
}
Run Code Online (Sandbox Code Playgroud)

可能是这样的:

stringvalue switch
{
    "Add" => Add(),
    "Subtract" => Subtract()
}
// but this complains that there needs to be assignment on left side for this
Run Code Online (Sandbox Code Playgroud)

这可能吗?

c# switch-statement c#-8.0 switch-expression

22
推荐指数
2
解决办法
5641
查看次数

此开关和案例标签中括号的用途是什么?

我正在为项目服务编写一个函数,如果用户请求某个名称下的所有项目,它将全部返回。例如所有 iPhone X 等手机。

我得到了帮助,使其中一个功能正常工作,如果项目超过 1 个,它将全部返回(这是第三种情况):

var itemsList = items.ToList();

switch (itemsList.Count())
{
    case 0:
        throw new Exception("No items with that model");

    case 1:
        return itemsList;

    case { } n when n > 1:
        return itemsList;
}

return null;
Run Code Online (Sandbox Code Playgroud)

让我困惑的是什么是{ }为?有人告诉我这是“一个用于说明类型的地方”,我不确定他们的意思。

它也是如何运作的?我不确定n是为了什么。

任何帮助是极大的赞赏!

进度:在跟进帮助程序后,我现在知道这{ }类似于var. 但我仍然不确定为什么只在这里使用它。

c# c#-8.0

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

HashSet<int> 和 List<int> 的快速交集

我有一个HashSet<int>和一个List<int>(Hashset 大约有 300 万个项目,List 大约有 300k 个项目)。

我目前使用它们相交

var intersected = hashset.Intersect(list).ToArray();
Run Code Online (Sandbox Code Playgroud)

我想知道是否有更快的方法来做到这一点。也许并行?

c# algorithm performance intersection hashset

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

c# 指示泛型成员的可空性

在这个人为的 C# 8 示例中:

#nullable enable
class Fred<T>
{
    T Value;  // If T is a nullable type, Value can be null.
    public Fred()                 { }
    public void SetValue(T value) { Value = value; }
    public T GetValue()           { return Value; }
    public string Describe()      { return Value.ToString() ?? "oops"; }
}
class George
{
    George()
    {
        Fred<George> fredGeorge = new Fred<George>();
        George g = fredGeorge.GetValue();
        Fred<float> fredFloat = new Fred<float>();
        float f = fredFloat.GetValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有三个设计目标:

  1. 如果我为 Fred …

c# nullable c#-8.0 nullable-reference-types

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

在新的switch c# 8.0中使用lambda函数返回值

我想在我的代码中使用新的开关,对于方法结果 make log 并 return IActionResult

我尝试做这样的事情:

var response = (this._coreRepository.Write(value.Content, data.Id.ToString())); \\return bool
return response switch
{
   true => () =>
   {
      this._log.LogInformation("Write is complited");
      return Ok();
   },
   false => () =>
   {
      this._log.LogInformation("Error in writing");
      return BadRequest();
   },
   _     => () =>
   {
      throw new Exception("Unexpected error");
   }
};
Run Code Online (Sandbox Code Playgroud)

但编译器对我说cannot convert lambda expression to type 'IActionResult' because it is not a delegate type

我该如何修复它?

c# lambda c#-8.0 switch-expression

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

CS8766:返回类型中引用类型的可空性与隐式实现的成员不匹配

我在 C# 8.0 项目中启用了可空引用。我还将所有警告设置为错误,以迫使自己解决所有此类警告。但其中之一让我感到困惑。它是一个依赖属性,它返回一个可能有效为空的接口指针。这是属性(在名为“LayerView”的控件内)

private static readonly DependencyProperty ShapeBeingDrawnProperty = DependencyProperty.Register(
    nameof(ShapeBeingDrawn), 
    typeof(IShape), 
    typeof(LayerView),
    new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));

public IShape ShapeBeingDrawn
{
    get => GetValue(ShapeBeingDrawnProperty) as IShape;  // RIGHT SIDE OF "=>" UNDERLINED IN RED
    set => SetValue(ShapeBeingDrawnProperty, value);
}
Run Code Online (Sandbox Code Playgroud)

启用可为空引用时,这会导致对 getter 的警告是可以理解的。get 的整个右侧用红色下划线标出,我收到此构建错误

1>C:\Users\jmole\Documents\Dev\Mobile\Core\Views\LayerView.xaml.cs(429,13,429,16): error CS8766:
Nullability of reference types in return type of 'IShape? LayerView.ShapeBeingDrawn.get' doesn't 
match implicitly implemented member 'IShape ILayerView.ShapeBeingDrawn.get' (possibly because of 
nullability attributes).
Run Code Online (Sandbox Code Playgroud)

首先,他们在谈论什么“隐式”实现的成员?这是一个显式实现的成员。我真的在这里实施它。但除此之外,我试图解决这个问题,因为我已经修复了许多其他此类有效可为空的属性:使属性返回一个可为空的引用

public IShape? ShapeBeingDrawn     // ONLY CHANGE IS HERE
{ …
Run Code Online (Sandbox Code Playgroud)

c# c#-8.0 nullable-reference-types

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