小编Eni*_*ity的帖子

使用 == 运算符比较两个对象

我有这段代码检查两个变量的引用,我遇到了这种情况,这有点令人困惑:

string first = "10";
object second = 10.ToString();
dynamic third = second;

Console.WriteLine($"{first == second}   {first == third}");
Run Code Online (Sandbox Code Playgroud)

结果是:False True

我的第一个问题是为什么第一个和第三个引用相等?如果第三个变量等于第二个变量,那应该是False因为它们的对象引用不相等。

当我将值更改为"1"如下所示时,我感到很困惑:

string first = "1";
object second = 1.ToString();
dynamic third = second;

Console.WriteLine($"{first == second}   {first == third}");
Run Code Online (Sandbox Code Playgroud)

那么结果就变成了:True True

为什么会出现这种情况?

.net c# .net-6.0

55
推荐指数
2
解决办法
3593
查看次数

Rx中的IConnectableObservables

有人可以解释Observable和ConnectableObservable之间的区别吗?Rx Extensions文档非常稀疏,我不明白ConnectableObservable在什么情况下是有用的.

此类用于Replay/Prune方法.

.net reactive-programming system.reactive

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

c# - 易失性关键字使用与锁定

我已经使用了volatile,我不确定它是否有必要.我很确定锁定在我的情况下会有点过分.阅读这个帖子(Eric Lippert评论)让我对使用volatile感到焦虑:什么时候应该在c#中使用volatile关键字?

我使用volatile是因为我的变量在多线程上下文中使用,其中可以同时访问/修改此变量,但是我可以在没有任何伤害的情况下松散添加(参见代码).

我添加"挥发性",以确保有不发生未命中对准:在另一个取可以在2通过在从另一个线程中间的写入被打破仅读取32可变的比特和其他32位.

我先前的假设(先前的陈述)是否真的可以发生?如果没有,"挥发性"使用是否仍然是必要的(选项属性修改可能在任何线程中发生).

看了2个第一个答案.我想坚持代码编写方式的事实,如果由于并发性我们错过了一个增量(想要从2个线程递增但结果仅由于并发而增加1)并不重要变量'_actualVersion'递增.

作为参考,这是我正在使用它的代码的一部分.仅在应用程序空闲时报告保存操作(写入磁盘).

public abstract class OptionsBase : NotifyPropertyChangedBase
{
    private string _path;

    volatile private int _savedVersion = 0;
    volatile private int _actualVersion = 0;

    // ******************************************************************
    void OptionsBase_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
    {
        _actualVersion++;
        Application.Current.Dispatcher.BeginInvoke(new Action(InternalSave), DispatcherPriority.ApplicationIdle);
    }

    // ******************************************************************
    private void InternalSave()
    {
        if (_actualVersion != _savedVersion)
        {
            _savedVersion = _actualVersion;
            Save();
        }
    }

    // ******************************************************************
    /// <summary>
    /// Save Options
    /// </summary>
    private void Save()
    {
        using (XmlTextWriter writer = new XmlTextWriter(_path, null)) …
Run Code Online (Sandbox Code Playgroud)

c# performance multithreading volatile dispatcher

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

获取组框内的子控件列表

我的应用程序中有一个包含子控件的groupbox.(如附图中所示).我想枚举所有文本框,使用简单的foreach循环执行一些验证.

本文件大纲将对控制的住房提供一个公平的概念

在此输入图像描述

foreach (Control control in grpBxTargetSensitivity.Controls)
            {
                if (control is FlowLayoutPanel && control.HasChildren)
                {
                    foreach (Control ctrl in control.Controls)
                    {
                        if (ctrl is Panel && ctrl.HasChildren)
                        {
                            foreach (Control tbox in ctrl.Controls)
                            {
                                if (tbox is TextBox)
                                {
                                    TextBox textbox = tbox as TextBox;
                                    validData &= !string.IsNullOrWhiteSpace(textbox.Text);
                                }
                            }
                        }
                    }
                }
            }
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有更好的方法(可能通过LINQ)获得所有控件,包括容纳在面板内的文本框,而不是上述方法.

c# linq

17
推荐指数
2
解决办法
9299
查看次数

在使用.NET的Reactive Extensions时保持对"IDisposable"的引用:总是,从不,或者有时候?

到现在为止,我还热心地保持每个参考IDisposable任何返回.Subscribe(...),.Connect(...)在RX等,方法.我之所以这样做,是因为我担心如果我不保留参考,垃圾收集将丢弃一次性物品.

但是,我做了一个测试在LINQPad在那里我做了一些电话GC.Collect().Subscribe(...),我没有保持基准和猜测什么?世界没有结束,订阅也完成了.

在进一步测试中,我发现我的订阅在.OnComplete()没有我干预的情况下立即被处理掉.

这使我理解,至少对于.Subscribe(...),保持对订阅的引用的唯一原因是强制订阅在其正常完成之前结束.它更像是取消令牌.

所有Rx一次性用品都用于取消而不是保持活力吗?

那么,什么是挂在上面的规则IDisposable

.net garbage-collection idisposable system.reactive

16
推荐指数
2
解决办法
1912
查看次数

.Net 的“Random”类中的错误?

我正在看一个问题,该问题讨论的是 Fisher-Yates shuffle 算法的错误实现,但我对错误实现时存在偏差感到困惑。

这两个算法是:

private Random _random = new Random();

public int[] FisherYates(int[] source)
{
    int[] output = source.ToArray();
    for (var i = 0; i < output.Length; i++)
    {
        var j = _random.Next(i, output.Length);
        (output[i], output[j]) = (output[j], output[i]);
    }
    return output;
}

public int[] FisherYatesBad(int[] source)
{
    int[] output = source.ToArray();
    for (var i = 0; i < output.Length; i++)
    {
        var j = _random.Next(0, output.Length);
        (output[i], output[j]) = (output[j], output[i]);
    }
    return output;
}
Run Code Online (Sandbox Code Playgroud)

一个非常微妙的不同,但足以引起巨大的偏见。

良好的实施:

好费雪-耶茨

错误的实现: …

.net c# random fisher-yates-shuffle

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

如何撰写Linq表达式?即Func <Exp <Func <X,Y >>,Exp <Func <Y,Z >>,Exp <Func <X,Z >>>

我正在创建一个Validator<T>班级.我正在尝试SelectMany为我的验证器实现Linq 扩展方法,以便能够使用Linq查询组合表达式,并在基础值发生更改时验证最终结果.

以下测试代码演示了我的意图.

var a = 2;
var b = 3;

var va = Validator.Create(() => a, n => n >= 0 && n < 5);
var vb = Validator.Create(() => b, n => n >= 0 && n < 5);

var vc = from ia in va
         from ib in vb
         select ia + ib;

Debug.Assert(vc.Value == a + b); //2 + 3
Debug.Assert(vc.Value == 5);

Debug.Assert(vc.IsValid == true);

a = 7;

Debug.Assert(vc.Value == a …
Run Code Online (Sandbox Code Playgroud)

.net c# linq linq-expressions

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

C# await 关键字是否会导致函数调用阻塞?

我正在尝试了解 async 和 await 在 C# 中的工作方式。

考虑以下两个片段:

var appIdTask = GetAppIdAsync();
var clientSecretTask = GetClientSecretAsync();
var appId = await appIdTask;
var clientSecret = await clientSecretTask;
Execute(appId, clientSecret);
Run Code Online (Sandbox Code Playgroud)

var appId = await GetAppIdAsync();
var clientSecret = await GetClientSecretAsync();
Execute(appId, clientSecret);
Run Code Online (Sandbox Code Playgroud)

这两个片段有不同的含义。正确的?

第一个将并行进行 Get 调用,而第二个将进行串行调用?

根据我的理解,第一次调用的 await 关键字会阻止第二次调用的执行。

c# asynchronous async-await

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

你如何使用Pop3'标记为'?

我正在使用开源客户端以编程方式处理传入的电子邮件(在Windows 2003上).防止接收先前读取的电子邮件的唯一方法是从服务器中删除它们.这不太理想.据我所知,Pop3中没有命令将电子邮件设置为正在读取.那么你怎么做呢?

.net pop3

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

Generating the Shortest Regex Dynamically from a source List of Strings

I have a bunch of SKUs (stock keeping units) that represent a series of strings that I'd like to create a single Regex to match for.

So, for example, if I have SKUs:

var skus = new[] { "BATPAG003", "BATTWLP03", "BATTWLP04", "BATTWSP04", "SPIFATB01" };
Run Code Online (Sandbox Code Playgroud)

...I'd like to automatically generate the Regex to recognize any one of the SKUs.

I know that I could do simply do "BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01", but list of SKUs can be quite lengthy and I'd like to …

c# regex linq lambda combinatorics

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