小编Joe*_*oeS的帖子

减少构造函数锅炉板代码

我经常最后写这样的课程:

public class Animal
{
    public string Colour { get; set; }
    public int Weight { get; set; }

    public Animal(Dog data)
    {
        this.Colour = data.Colour;
        this.Weight = data.Weight;
    }

    public Animal(Cat data)
    {
        this.Colour = data.Colour;
        this.Weight = data.Weight;
    }
}
Run Code Online (Sandbox Code Playgroud)

当你有很多属性和类型时,你很快就会得到很多锅炉板代码.理想情况下,在这种情况下,我只需创建一个IAnimal接口并引用它.我目前处于第三方程序集中存在Dog和Cat类的情况,我无法修改它们.我能想出的唯一解决方案是:

public class Animal
{
    public string Colour { get; set; }
    public int Weight { get; set; }

    public Animal(Cat data){Init(data);}
    public Animal(Dog data){Init(data);}

    private void Init(dynamic data)
    {
        this.Colour = data.Colour;
        this.Weight = data.Weight;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c#

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

抛出错误但不向用户显示错误的最简洁方法(没有自定义错误页面)

我正在运行一些只需要运行一次的代码,但它依赖于外部资源而且可能会失败.我希望错误出现在事件日志中,但我不希望用户看到它.我想尽可能避免使用自定义错误页面.

我可以捕获异常并将其自己写入事件日志,但我担心我不能保证asp.net事件源的名称会是什么(它似乎会根据框架版本而改变.)我也是无法创建我自己的事件源,因为它需要管理权限.

我目前正在努力的方法是一个黑客(它还没有工作),它看起来像这样:

    public void Init(HttpApplication context)
    {
        try
        {
            throw new Exception("test"); // This is where the code that errors would go
        }
        catch (Exception ex)
        {
            HttpContext.Current.Application.Add("CompilationFailed", ex);
        }
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        if (HttpContext.Current.Application.AllKeys.Contains("CompilationFailed"))
        {
            // It failed on Init - we can't throw an exception there so lets try it here

            var origEx = (Exception)HttpContext.Current.Application["CompilationFailed"];
            // Only ever do this once
            HttpContext.Current.Application.Remove("CompilationFailed");

            // This should just look like a normal page load …
Run Code Online (Sandbox Code Playgroud)

c# asp.net event-log

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

kube-system/ingress 控制器 Pod 的多个副本?

我们有一个相对标准的 Kubernetes 集群,托管在负载均衡器后面的云中。我们发现大多数系统 Pod 仅作为单个实例运行,真正令人担忧的是默认情况下我们的 nginx 入口控制器也将作为单个实例运行。这意味着,如果发生节点故障,每个应用程序都有 1/n 的几率出现​​故障,直到活性探测器启动并移动入口控制器 Pod。

我们必须增加入口控制器的副本数量,因为它是单点故障。然而,我对网络图的外观并不是特别满意,我想如果我们的任何应用程序都是有状态的,这会导致问题。

有些 Pod(如 Heapster)您可能只能拥有一个实例,但我想知道是否有人对哪些内容可以扩展、哪些内容不能扩展以及为什么这是默认行为有任何指导?

谢谢,

kubernetes

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

是否可以检查两组是否相等?

如果我有这样的HTML:

 <b>1<i>2</i>3</b>
Run Code Online (Sandbox Code Playgroud)

以下正则表达式:

 \<[^\>\/]+\>(.*?)\<\/[^\>]+\>
Run Code Online (Sandbox Code Playgroud)

然后它将匹配:

 <b>1<i>2</i>
Run Code Online (Sandbox Code Playgroud)

我希望它只匹配开始和结束标记相同的HTML.有没有办法做到这一点?

谢谢,

regex

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

以这种方式使用内联if语句是否有效?

如果我为一个变量赋值,然后想为它分配第二个值,但只有当它满足条件时,使用简写if语句是否同样有效?这是一个例子.

这更有效率吗?

int x = GetInt();
if (x < 5)
    x = 5;
Run Code Online (Sandbox Code Playgroud)

比这个

int x = GetInt();
x = x < 5 ? 5 : x;
Run Code Online (Sandbox Code Playgroud)

我想我真正要问的是,如果x不满足条件,那么x = xelse语句会影响性能吗?

c#

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

替代在 IAsyncEnumerable 中产生

我正在尝试检索使用 C# 8.0 中新的 AsyncEnumerables 分页的数据。回到同步 IEnumerable 世界,代码看起来像这样:

private IEnumerable<S3Object> Example(S3FilesRequest requestData)
    {
        var request = new ListObjectsV2Request()
        {
            BucketName = requestData.Bucket,
            Prefix = requestData.KeyPrefix
        };

        ListObjectsV2Response response;
        do
        {
            response = this.client.ListObjectsV2Async(request).Result;
            foreach (var s3Obj in response.S3Objects)
                yield return s3Obj;
            request.ContinuationToken = response.NextContinuationToken;
        } while (response.IsTruncated);
    }
    // Not tested - can probably be more succinct (using TakeWhile and SelectMany) but you get the idea
Run Code Online (Sandbox Code Playgroud)

使用 IAsyncEnumerable 我认为它看起来像这样:

private IAsyncEnumerable<S3Object> listObjects(S3FilesRequest requestData)
        => AsyncEnumerable.CreateEnumerable(() =>
        {
            var request = …
Run Code Online (Sandbox Code Playgroud)

c# ienumerable asynchronous c#-8.0 iasyncenumerable

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

简单地分配变量时是否需要使用锁?

当多线程我知道我需要锁定变量,如果像添加和项目到列表等,或者我会得到一个跨线程异常.但是在分配变量时我是否需要锁定它们?我不介意线程是否获得变量的旧实例 - 我只是不希望它出错.这是我的意思的一个例子:

    public void Run()
    {
        var thread1 = new Thread(new ThreadStart(Test));
        var thread2 = new Thread(new ThreadStart(Test));
        thread1.Start();
        thread2.Start();
    }

    private static int _test;

    private void Test()
    {
        while (true)
        {
            _test += 1;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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

LINQ和ReSharper

嗨,我有以下代码:

if (!_jobs.Any(j => j.Id == emailJob.Id))
{
}
Run Code Online (Sandbox Code Playgroud)

此代码应找到满足条件的任何元素.所以我认为它应该在找到第一个元素后返回,如下所示:

if (!_jobs.FirstOrDefault(j => j.Id == emailJob.Id) != null)
{
}
Run Code Online (Sandbox Code Playgroud)

Resharper尝试将此LINQ表达式简化为:

if (_jobs.All(j => j.Id != emailJob.Id))
{
}
Run Code Online (Sandbox Code Playgroud)

这似乎对我来说效率较低,因为它必须检查每个元素是否满足逆条件.

对不起,如果我只是误解LINQ如何工作.

c# linq resharper

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

用于字典的不区分大小写的字符串?

我需要一个字典来获得一个字符串,但忽略大小写.我已经反编译了Dictionary类型,它基本上创建了密钥哈希码的哈希表.我不能将字符串子类化,因为它是一个原始类型,所以我创建了自己的类作为键:

struct StringCaseInsensitiveHash
{
    private readonly string _innerString;
    public StringCaseInsensitiveHash(string str)
    {
        _innerString = str;
    }

    public static implicit operator string(StringCaseInsensitiveHash stringCaseInsensitiveHash)
    {
        return stringCaseInsensitiveHash._innerString;
    }

    public override int GetHashCode()
    {
        return _innerString.ToLower().GetHashCode();
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来做到这一点?

谢谢,

c#

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

如何从集合中随机获取字符串,但更喜欢集合开头的字符串

如果我有一个包含以下字符串的列表:

  "a","b","c","d","e","f","g","h","i","j","k","l","m","n"
Run Code Online (Sandbox Code Playgroud)

获取随机字符串的最佳方法是什么,但加权的方式更可能是"a"而不是"n"?

c# random

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