连接两个字符串,如果两者都为空,则为空
Posted
技术标签:
【中文标题】连接两个字符串,如果两者都为空,则为空【英文标题】:Concatenate two strings and get null if both are null 【发布时间】:2021-09-26 12:48:18 【问题描述】:我正在寻找一种解决方案来连接两个字符串值并得到null
,如果两者都是null
。
string1 + string2
、string.Concat(string1, string2)
、string.Join(string1, string2)
都不起作用。研究表明,这是因为这些方法在内部将 null 视为空字符串。
如何解决?
【问题讨论】:
你为什么不事先检查string1 == null && string2 == null
?
string result = string1 == null && string2 == null ? null : string1 + string2;
如果我最终的目标是更复杂的公式:(a + b) ?? (c + d)
,但是当a
和b
都是null
时a + b
不会计算为null
string result = (a == null && b == null) ? c + d : a + b;
如果a
和b
都是null
,我们应该计算c + d
,否则a + b
【参考方案1】:
因为你的实际公式是
(a + b) ?? (c + d) // assumes that null + null == null in (a + b)
建议改写成
a == null && b == null ? c + d : a + b
提供预期结果:
如果 两者a
和 b
是 null
我们有 c + d
a + b
否则
如果你想在所有a, b, c, d
都是null
时拥有null
(不是空字符串):
a == null && b == null ?
c == null && d == null
? null
: c + d
: a + b;
【讨论】:
解决XY问题,我喜欢。【参考方案2】:这样的?
public class StringTest
public string CustomConcat(string one, string two) =>
one == null && two == null
? null
: string.Concat(one, two);
[Test]
public void ConcatTest()
Assert.IsNull(CustomConcat(null, null));
Assert.AreEqual("one", CustomConcat("one", null));
Assert.AreEqual("two", CustomConcat(null, "two"));
Assert.AreEqual("onetwo", CustomConcat("one", "two"));
// finally, a test for (a + b) ?? (c + d)
Assert.AreEqual("threefour", CustomConcat(null, null) ?? CustomConcat("three", "four"));
【讨论】:
【参考方案3】:是的,不同的方法调用处理不同的前置条件,但您始终可以创建自己的函数来处理“自定义”前置条件。
作为最简单的选择,您可以尝试以下方法:
String concatenateStrings(string s1, string s1)
return (s1 == null && s2 == null)? null : String.concat(s1,s2);
【讨论】:
请在发布答案之前阅读已经添加的答案,并且请避免添加与其他答案非常非常相似的答案。 BR – 咆哮 S.【参考方案4】:你可以这样做:
var textResult = string.Empty;
if (string.IsNullOrWhiteSpace(text1) &&
string.IsNullOrWhiteSpace(text2))
textResult = null;
else
if (!string.IsNullOrWhiteSpace(text1) &&
string.IsNullOrWhiteSpace(text2))
textResult = text1;
else
if (string.IsNullOrWhiteSpace(text1) &&
!string.IsNullOrWhiteSpace(text2))
textResult = text2;
textResult = $"text1 text2";
或者以更好的方式:
textResult = (!string.IsNullOrWhiteSpace(text1) &&
string.IsNullOrWhiteSpace(text2)) ?
text1 :
(string.IsNullOrWhiteSpace(text1) &&
!string.IsNullOrWhiteSpace(text2)) ?
text2 :
(string.IsNullOrWhiteSpace(text1) &&
!string.IsNullOrWhiteSpace(text2)) ?
text2 :
$"text1 text2";
【讨论】:
以上是关于连接两个字符串,如果两者都为空,则为空的主要内容,如果未能解决你的问题,请参考以下文章