小编Mar*_*ker的帖子

对后面代码中视图模型属性的更改做出反应

假设视图模型正确实现,在后面的代码中对视图模型(未指定类型)的名为foo的属性进行更改的最佳方法是什么INotifyPropertyChanged

通常可以绑定控件元素来查看模型属性,一切正常.但在这种情况下,这还不够,我需要在属性更改时执行一些c#行.

可以监听DataContext的相应事件,但是,我还处理了DataContext本身的更改.另一种可能的解决方案是DependencyProperty在代码隐藏文件中引入一个.但是有没有更短的方式?

c# wpf mvvm

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

如何避免不相关的可空警告(没有显式抑制)

有没有办法让分析器理解变量Bar具有以下情况的值?

#nullable enable 
class Foo {
   bool GenerateArray => Bar.HasValue;
   int? Bar { get; set; }
   void FooBar() {
     var data = (GenerateArray) ? new int[Bar.Value] : null;
   }
}
Run Code Online (Sandbox Code Playgroud)

有警告“可空值类型可能为空”。因为Bar.Value但显然不可能。

我知道有两种方法可以避免警告。两者都有缺点:

  1. Bar.HasValue直接使用而不是属性GenerateArray。但是使用GenerateArray可以提高可读性。
  2. 使用Bar!.Value代替Bar.Value. 但是,如果有人更改了代码,例如,通过GenerateArray在将来创建自动属性,警告可能会再次变得相关,但不会出现。

这里的问题与此问题略有不同,后者使用局部变量而不是属性。如果我理解正确的话,下面接受的答案适用于属性(只要 C# 9 发布),但不适用于局部变量。因此,这个问题不是重复的。

c# nullable c#-8.0

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

.NET Framework 4.7.2 中的 C# 8 功能

在面向 .NET Framework 4.7.2 的 ac# 项目中,我将本地函数设为静态,因为 Visual Studio (16.3.3) 建议这样做。一切都编译并运行良好。但是当我在安装了 Visual Studio Build Tools (16.3.3) 的 CI 构建服务器上推送它时,它抱怨:

错误 CS8652:“静态本地函数”功能当前处于预览状态且不受支持。要使用预览功能,请使用“预览”语言版本。

我能弄清楚的是,静态本地函数是 C# 8 的一项功能,而 C# 8 不适用于面向 .NET Framework 4.7.2 的项目。那么为什么它首先起作用,我该怎么做才能让它在构建服务器上编译?

c# c#-8.0 .net-4.7.2 visual-studio-2019

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

以紧凑的方式迭代两个列表

有没有比以下更紧凑的方法来编写一次迭代两个列表的循环:

var listA = new List<string>();
var listB = new List<int>();
foreach (var (itemFromListA, itemFromListB) in listA.Zip(listB, 
        (itemFromListA, itemFromListB)=>(itemFromListA, itemFromListB)){                
   // do something with itemFromListA and itemFromListB
}
Run Code Online (Sandbox Code Playgroud)

键入(itemFromListA, itemFromListB)三遍似乎不必要地繁琐,而且(itemFromListA, itemFromListB)=>(itemFromListA, itemFromListB)对于身份运算符来说,诸如此类的内容太长了。

c# linq

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

使用记录而不是类有什么缺点?

C# 9 引入了记录引用类型。一条记录提供了一些合成方法,如复制构造函数、克隆操作、哈希码计算和比较/相等操作。在我看来,使用记录而不是一般的类很方便。有理由不这样做吗?

在我看来,目前作为编辑器的 Visual Studio 不支持记录和类,但这在未来可能会改变。

c#-9.0

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

标签 统计

c# ×4

c#-8.0 ×2

.net-4.7.2 ×1

c#-9.0 ×1

linq ×1

mvvm ×1

nullable ×1

visual-studio-2019 ×1

wpf ×1