Using StatePrinter from VB rather than C# to imple

2019-06-07 02:24发布

问题:

I'm trying to follow the promising suggestion posted here to try StatePrinter as a shortcut to rolling my own ToString methods. I agree with the OP that it is a shame that VS still can't generate this method for me.

I've got a fairly large project, in VS2015 (Community Edition), with both VB and C# code. I added the current stable version of StatePrinter using NuGet.

I can make the example code from the SO answer work fine in my C# code but when I do what I think is the equivalent in my VB code:

Private Shared sp As StatePrinter.Stateprinter = New StatePrinter.Stateprinter
    Public Overrides Function ToString() As String
        Return sp.PrintObject(Me)
    End Function

I just get the compiler error

'Stateprinter' is ambiguous in the namespace 'StatePrinter' 

There IS another constructor, StatePrinter (note difference in capitalization only) which is deprecated and, in any case, generates the same error message.

I'm led to the unfortunate conclusions that

  1. VB in VS2015 is acting as if it is case insensitive. Can that be true?
  2. No one else is using StatePrinter from VB.

Can anyone provide any suggestions on how to use StatePrinter from VB? I'm willing to believe I'm making some rather brain-dead mistake in converting the C# example to VB.

回答1:

It is near impossible to use this directly in VB and get around the ambiguous name issue. You could write a class library wrapper in C# that doesn't expose this mismatch (that is, it has an internal StatePrinter object and exposes constructors that are PascalCased the same.

Another option would be to use reflection in the VB project to get around the case insensitivity.

You could also create a GitHub issue. Or, be a contributor to the project and create a suggested fix for it. :)



回答2:

As soon as I got done writing #1 in the question above, I was able to figure out how to search for the answer to that bit.

Yes, VB is case insensitive, at least, as far as it needs to be in this case: See the rather nice writeup here: https://stackoverflow.com/a/2301980/165164

So, we're left with the rather plaintive: is no one else using StatePrinter from VB?