我有以下代码来组成一个简单的 SOAP Post 表单数据值:
var postParameters = new Dictionary<string, string>
{
{ "someNumber", "100" },
{ "someString", "Hello World" }
};
var resultWhenNotInConditional =
postParameters
.Keys
.Zip(postParameters.Values,
(key, value) => string.Format("{0}={1}", key, value))
.Aggregate<string, string>(null,
(prev, next) =>
(prev != null)
? string.Format("{0}&{1}", prev, next)
: next);
按设计工作,即
resultWhenNotInConditional = "someNumber=100&someString=Hello World"
但是,当我将其包装在条件运算符中以进行空检查时,如下所示:
var resultWhenInConditional =
(postParameters != null)
? postParameters
.Keys
.Zip(postParameters.Values,
(key, value) => string.Format("{0}={1}", key, value))
.Aggregate<string, string>(null,
(prev, next) =>
(prev != null)
? string.Format("{0}&{1}", prev, next)
: next)
: string.Empty;
无论是设置为 null 还是设置为 valid ,resultWhenInConditional
似乎始终为 null 。(将 更改为显式也没有效果)。postParameters
Dictionary<string, string>
var
string
我可以解决这个问题的唯一方法是在ToString()
之后添加Aggregate
,即:
var resultWhenInConditional =
(postParameters != null)
? postParameters
.Keys
.Zip(postParameters.Values,
(key, value) => string.Format("{0}={1}", key, value))
.Aggregate<string, string>(null,
(prev, next) =>
(prev != null)
? string.Format("{0}&{1}", prev, next)
: next)
.ToString() // R# warns this is redundant
: string.Empty;
所以我的问题是,为什么我需要.ToString()
在条件运算符中添加附加项?
- Microsoft Visual Studio 专业版 2010 版本 10.0.40219.1 SP1Rel
- Microsoft .NET 框架版本 4.0.30319 SP1Rel
编辑
感谢您的反馈!
为了确认这只是一个异常 - VS IDE 将变量报告为 NULL(在鼠标悬停 + 立即窗口中),但仅在使用 R# NUnit 测试运行程序单独调试单元测试时。在控制台 App 下调试,在 IDE 中正确报告值。
即这仅在调试时发生,在 Resharper NUnit TestRunner 下。
一旦变量被进一步的代码(例如Assert
/Console.Writeline
等)访问,很明显该值实际上不是空的。
我在GitHub 中添加了一个控制台应用程序, 并在此处添加了屏幕截图
没有一个单元测试实际上失败,即该值实际上不是 null :-)
- R# 7.1.3 C# 版 (2224)
- NUnit 2.6.1.12217