I prefer to use plain C# to write such assertions, which you can with ExpressionToCode (nuget package). With that, your assertion would look as follows:
PAssert.That(
() => read1 == expectedString && read2 == expectedString
, "optional failure message");
On a failure, the library will include that expression in it's output, and include the actual values of the various variables (read1, read2, and expectedString) you've used.
For example, you might get a failure that looks as follows:
optional failure message
read1 == expectedString && read2 == expectedString
| | | | | | |
| | | | | | "blah"
| | | | | false
| | | | "Blah"
| | | false
| | "blah"
| true
"blah"
Disclaimer: I wrote ExpressionToCode.