小编sha*_*ner的帖子

将'var'初始化为null

以下变量初始化之间的运行时性能是否有任何差异?

var    x = null as object;
var    x = (object) null;
object x = null;
Run Code Online (Sandbox Code Playgroud)

c# null var

19
推荐指数
2
解决办法
1254
查看次数

可以物理访问源生成器创建的文件吗?

是否有任何标准方法/选项,如何安排通过生成Source Generators并添加到构建过程中的文件在项目结构中也物理可见(以便开发人员可以通过 VS 解决方案资源管理器窗口查看结果代码)?

我的意思是,除了将代码直接保存到生成器中的文件中之外Execute(),我预计这可能会带来其他复杂性(尚未尝试)。

编辑:

  • 根据此: https: //github.com/dotnet/roslyn/issues/49249#issuecomment-809807528,生成器执行中不允许 I/O。
  • 根据调试会话(进入生成的代码功能),生成的源代码至少在临时文件夹中可用,例如C:\Users\user\AppData\Local\Temp\.vsdbgsrc\some-guid\FileNameHint.cs. 不幸的是,标准 VS 导航 (F12) 不起作用(无论调试会话活动如何)。

c# csharp-source-generator

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

从初始化程序创建列表

两者之间有什么区别吗?

var list = new List<UserType>
{
    new UserType(...),
    new UserType(...),
};
Run Code Online (Sandbox Code Playgroud)

var list = new List<UserType>()
{
    new UserType(...),
    new UserType(...),
};
Run Code Online (Sandbox Code Playgroud)

我曾经常常使用第二个认为我只需要调用list的无参数(或任何其他)构造函数...

c# list initializer

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

如何在C#中模仿友谊?

我想声明(只)A类可以访问/操作(类)B类成员.如果没有friend存在,如何实现这一点C#

c# friend

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

从异步方法更新GUI

在创建简单的样本使用期间async/await,我发现,一些示例只是在Button1_Click类似的方法上说明模式,并直接从async方法中自由更新GUI控件.因此可以将此视为安全机制.但是,我的测试代码是不断地对崩溃TargetInvocationException的例外在mscorlib.dll与内部异常,如:NullReference,ArgumentOutOfRange等.关于堆栈跟踪,一切似乎都指向WinForms.StatusStrip显示结果(直接从驱动标签async绑定到按钮事件处理方法).Control.Invoke在访问GUI控件时使用旧学校时,崩溃似乎已得到解决.

问题是:我错过了重要的事情吗?异步方法是否与先前用于长期操作的线程/后台工作程序相同,因此Invoke是推荐的解决方案?直接从async方法错误驱动GUI的代码片段是什么?

编辑:对于缺失源的downvoters:创建一个包含三个按钮的简单表单和一个包含两个标签的StatusStrip ...

//#define OLDSCHOOL_INVOKE

using System;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace AsyncTests
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }


        private async void LongTermOp()
        {
            int delay;
            int thisId;

            lock (mtx1)
            {
                delay  = rnd.Next(2000, 10000);
                thisId = firstCount++;
#if OLDSCHOOL_INVOKE
                Invoke(new Action(() =>
#endif
                label1Gen.Text = …
Run Code Online (Sandbox Code Playgroud)

c# asynchronous winforms thread-synchronization

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