gpt4 book ai didi

c# - IF 语句的内联赋值

转载 作者:行者123 更新时间:2023-11-30 13:54:40 25 4
gpt4 key购买 nike

是否可以将赋值和验证“短路”到 IF 语句中..

这里面有些东西..

if ((Match m = Regex.Match(data, pattern)).Success)
{
Console.WriteLine(m.Groups["myField"].Value;
}

最佳答案

一般来说:赋值是,声明不是:

Match m;
if ((m = Regex.Match(data, pattern)).Success)
{
Console.WriteLine(m.Groups["myField"].Value);
}

声明表达式 have been suggested但尚未实现。

但是,根据您的 C# 版本,有针对您的特定用例的解决方法。


C# 7:从 C# 7 开始,方法调用中 out 参数的参数可以声明为内联:

string s = "123";
if (int.TryParse(s, out int i))
Console.WriteLine($"{s} has been parsed as {i}.");
else
Console.WriteLine($"Unable to parse {s}.");

因此您可以通过设计自定义 RegexTryMatch 方法来解决您的问题:

public static bool RegexTryMatch(string input, string pattern, out Match match)
{
match = regex.Match(input, pattern);
return match.Success;
}

调用时使用此模式:

if (RegexTryMatch(data, pattern, out Match m))
{
Console.WriteLine(m.Groups["myField"].Value);
}

将这样的方法添加到.NET 类库中是currently being discussed .


C# 9:C# 9 的模式匹配功能允许一个与您提出的非常相似的解决方案:

if (Regex.Match(data, pattern) is { Success: true } m)
{
Console.WriteLine(m.Groups["myField"].Value);
}

或者,或者:

if (Regex.Match(data, pattern) is {} m && m.Success)
{
Console.WriteLine(m.Groups["myField"].Value);
}

关于c# - IF 语句的内联赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40278698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com