我经常最后写这样的课程:
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) 我正在运行一些只需要运行一次的代码,但它依赖于外部资源而且可能会失败.我希望错误出现在事件日志中,但我不希望用户看到它.我想尽可能避免使用自定义错误页面.
我可以捕获异常并将其自己写入事件日志,但我担心我不能保证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) 我们有一个相对标准的 Kubernetes 集群,托管在负载均衡器后面的云中。我们发现大多数系统 Pod 仅作为单个实例运行,真正令人担忧的是默认情况下我们的 nginx 入口控制器也将作为单个实例运行。这意味着,如果发生节点故障,每个应用程序都有 1/n 的几率出现故障,直到活性探测器启动并移动入口控制器 Pod。
我们必须增加入口控制器的副本数量,因为它是单点故障。然而,我对网络图的外观并不是特别满意,我想如果我们的任何应用程序都是有状态的,这会导致问题。
有些 Pod(如 Heapster)您可能只能拥有一个实例,但我想知道是否有人对哪些内容可以扩展、哪些内容不能扩展以及为什么这是默认行为有任何指导?
谢谢,
乔
如果我有这样的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.有没有办法做到这一点?
谢谢,
乔
如果我为一个变量赋值,然后想为它分配第二个值,但只有当它满足条件时,使用简写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# 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) 当多线程我知道我需要锁定变量,如果像添加和项目到列表等,或者我会得到一个跨线程异常.但是在分配变量时我是否需要锁定它们?我不介意线程是否获得变量的旧实例 - 我只是不希望它出错.这是我的意思的一个例子:
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) 嗨,我有以下代码:
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如何工作.
乔
我需要一个字典来获得一个字符串,但忽略大小写.我已经反编译了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)
有没有更好的方法来做到这一点?
谢谢,
如果我有一个包含以下字符串的列表:
"a","b","c","d","e","f","g","h","i","j","k","l","m","n"
Run Code Online (Sandbox Code Playgroud)
获取随机字符串的最佳方法是什么,但加权的方式更可能是"a"而不是"n"?
c# ×8
asp.net ×1
asynchronous ×1
c#-8.0 ×1
event-log ×1
ienumerable ×1
kubernetes ×1
linq ×1
random ×1
regex ×1
resharper ×1