Thanks Luc. Yes, I could just iterate through the dictionary and populate the listbox but my concern is that I would be exposing the 'master' collection to the form. From an abstraction point of view I was trying to avoid this and only allowing a method (parkinglot.displayitems) to output the contents of the dictionary in a read only form (currently a string that is formatted ready to just display in the textbox)... this is where I've now got confused! Do I just return a copy of the dictionary from this method or some other collection (which I can then iterate through or bind to), or do I just expose the master dictionary object? I'm trying to follow/show good design practices with this project :-/
When you return a collection of objects basically it is an array of pointers. Making the collection read-only protects the array, not its elements (the objects it refers to). So whatever you do, as long as you export instances of Vehicle, they become public and modifiable.
There are two ways to remedy this:
1. Create and export a deep copy: build a new collection with copies of your Vehicles. Now if Vehicle contains references (say to a Manufacturer class), then these objects must be deep copied too. That soon gets very cumbersome.
2. Create and export exactly the information you need, in a data structure that isn't otherwise used in your ParkingLot class. In this case that would be a list of strings. And then you should create this data each time it is requested, you should not store it inside ParkingLot and just pass a pointer, as then one client could still falsify the information another client gets.
Either way, the clean approach is to provide a ParkingLot property or method that creates and returns the information required; and then you can use that any way you want, no harm can be done to the ParkingLot.
The one thing you probably would also need is a way to signal the outside world your ParkingLot has changed. An event seems appropriate here.
Performance is not an issue, even with thousands of dictionary entries.
Your "parking lot" class is in effect your "data repository", and you can use a similar pattern for that. Ultimately, your "backing store" may be be XML or a data base; if a "client" needs a "list", they get a list; if they want to "empty" a parking spot, there's a method for that, etc. The client doesn't care what the backing store looks like, it just wants what it needs.
And as Luc pointed out, it's all references to existing objects unless you're cloning.
It was only in wine that he laid down no limit for himself, but he did not allow himself to be confused by it.
― Confucian Analects: Rules of Confucius about his food
This is not a good question - we cannot work out from that little what you are trying to do.
Remember that we can't see your screen, access your HDD, or read your mind - we only get exactly what you type to work with.
So typing as little as possible help no-one - we don't even know what kind of app you are writing, so we can't give you any specific information!
Try again, this time explaining as if to someone who knows absolutely nothing about your project and is at the other end of a telephone.
Tell us what you have tried, where you are stuck, what help you need - and be specific!
"I have no idea what I did, but I'm taking full credit for it." - ThisOldTony
AntiTwitter: @DalekDave is now a follower!
Unable to see traces and Service in Jaeger UI on host server, used C# client (tracer) for Jaeger but able see traces in local environment using "jaeger-all-in-one --collector.zipkin.http-port=9411"
I have tried below code and Referred link as
public static class JaegerTracingServiceCollectionExtensions
public static IServiceCollection AddJaegerTracing(
this IServiceCollection services,
Action<jaegertracingoptions> setupAction = null)
if (setupAction != null) services.ConfigureJaegerTracing(setupAction);
var options = cli.GetService<ioptions<jaegertracingoptions>>().Value;
var senderConfig = new Jaeger.Configuration.SenderConfiguration(options.LoggerFactory)
var reporter = new RemoteReporter.Builder()
var sampler = new GuaranteedThroughputSampler(options.SamplingRate, options.LowerBound);
var tracer = new Tracer.Builder(options.ServiceName)
// Allows code that can't use dependency injection to have access to the tracer.
I am beginner in C# and I am building an application to create a workbook (Book1.xlsx) then copy a specific sheet from another workbook ( Book2.xlsx ).
I created Book1 but I am trying to copy Sheet1 from Book2 but I could not.
before copying [Sheet1 from Book2 ] I am dong a kind of check to collect names for all opened workbooks so I could not be able to get names of workbooks which opened by Visual Studio c# by the below piece of code but If will open the same workbooks by myself I found the below code can get the name of opened workbooks without problem.
I`m working on a graphics editor. I was trying to implement a gui in DirectX but I realised that`s not the right approach. I`m used to C# Forms so I was asking myself if I can stitch C# GUI (Forms) and C++ DirectX together. Any help is welcome.
WinForms is also not the right approach. Use WPF instead.
".45 ACP - because shooting twice is just silly" - JSOP, 2010 ----- You can never have too much ammo - unless you're swimming, or on fire. - JSOP, 2010 ----- When you pry the gun from my cold dead hands, be careful - the barrel will be very hot. - JSOP, 2013
I need a usable license plate recognition program for my thesis. I would like to use it for entry access control. I wrote my program in C# language and the recogniser should be detect plate from images. I really appreciate any help or suggestion.
I want to detect europen plates, especially Hungarian and area.