|
If you are willing to try a commercial licensing solution then check Ellipter
It creates short product keys with embedded product info and/or expiration time handled automatically.
Also it has a GUI based serials generator which can be used by your client to create serials.
|
|
|
|
|
I have a problem with slow application startup due to security issues. I have tried ngen and profiled application twice but without any improvement. Still the biggest problem is in security and "unmanaged world" when .NET loads and calls methods like
<br />
PermissionSet.DecodeXml - takes enormous time to complete
CodeSecurityAccess.Demand internaly calls AppDomain.SerializeObject and runs CrossAppDomainSerializer (why when I have only ONE AppDomain?)
note: Assemblies have
[assembly: SecurityPermission(SecurityAction.RequestMinimum, UnmanagedCode=true, SkipVerification = true, Execution=true)]<br />
[assembly: UIPermission(SecurityAction.RequestMinimum, Unrestricted = true)]<br />
And I also suspect AuthentiCode and another unmanaged world issues to be a problem. Is there a tool or a white paper to figure it out?
Thanks for help.
Wizard_01
|
|
|
|
|
Hi,
I'm just sick of this lengthy switch case drama and I have a feeling there are already better solutions out there, if not, please help me with a creative way you may have used once to make it easier and shorter..
Many thanks for sharing guys!
All generalizations are wrong, including this one!
(\ /)
(O.o)
(><)
|
|
|
|
|
You have a few options... it depends on the situation, really.
One possibility is to take the bodies of the case statements and make methods out of them.
Another is to create a dictionary of key to delegate, and do a dictionary lookup/invoke in place of a switch.
Another is to look for an object-oriented way where you differentiate behavior by overriding an abstract/virtual method, in place of a switch statement somewhere.
All depends, though.
|
|
|
|
|
Thanks, anyway to do it with Enum s you know??
All generalizations are wrong, including this one!
(\ /)
(O.o)
(><)
|
|
|
|
|
Yes, it should work with enums.
Again, though, it really depends a lot on what you're trying to do, so it's hard to recommend one approach over another... but here's a sample of some different techniques. Each have their strengths and weaknesses, depending on your situation.
Assuming an enum like:
enum MyEnum { Foo, Bar, Baz }
switch way:
bool method(MyEnum val)
{
switch (val)
{
case MyEnum.Foo:
Console.WriteLine("Some");
Console.WriteLine("big");
Console.WriteLine("case");
Console.WriteLine("statement");
Console.WriteLine("that");
Console.WriteLine("Foo");
Console.WriteLine("does");
return true;
case MyEnum.Bar:
throw new Exception("Bar!");
case MyEnum.Baz:
Console.Beep();
Console.WriteLine("Beep.");
return false;
default:
throw new ArgumentOutOfRangeException("val");
}
}
Refactor to methods way:
bool method(MyEnum val)
{
switch (val)
{
case MyEnum.Foo:
return FooMethod();
case MyEnum.Bar:
return BarMethod();
case MyEnum.Baz:
return BazMethod();
default:
throw new ArgumentOutOfRangeException("val");
}
}
bool FooMethod()
{
Console.WriteLine("Some");
Console.WriteLine("big");
Console.WriteLine("case");
Console.WriteLine("statement");
Console.WriteLine("that");
Console.WriteLine("Foo");
Console.WriteLine("does");
return true;
}
bool BarMethod()
{
throw new Exception("Bar!");
}
bool BazMethod()
{
Console.Beep();
Console.WriteLine("Beep.");
return false;
}
Dictionary way (.Invoke() is just for clarity):
delegate bool BoolFunc();
readonly Dictionary<MyEnum, BoolFunc> methods;
MyClassConstructor()
{
methods = new Dictionary<MyEnum, BoolFunc>();
methods.Add(MyEnum.Foo, FooMethod);
methods.Add(MyEnum.Bar, BarMethod);
methods.Add(MyEnum.Baz, BazMethod);
}
bool method(MyEnum val)
{
BoolFunc funcToCall;
if (!methods.TryGetValue(val, out funcToCall))
throw new ArgumentOutOfRangeException("val");
return funcToCall.Invoke();
}
bool FooMethod()
{
Console.WriteLine("Some");
Console.WriteLine("big");
Console.WriteLine("case");
Console.WriteLine("statement");
Console.WriteLine("that");
Console.WriteLine("Foo");
Console.WriteLine("does");
return true;
}
bool BarMethod()
{
throw new Exception("Bar!");
}
bool BazMethod()
{
Console.Beep();
Console.WriteLine("Beep.");
return false;
}
Subclass/override way (the enum actually goes away here):
bool method(MyNonEnumClass val)
{
return val.DoYourThing();
}
abstract class MyNonEnumClass
{
public abstract bool DoYourThing();
}
class FooClass : MyNonEnumClass
{
public override bool DoYourThing()
{
Console.WriteLine("Some");
Console.WriteLine("big");
Console.WriteLine("case");
Console.WriteLine("statement");
Console.WriteLine("that");
Console.WriteLine("Foo");
Console.WriteLine("does");
return true;
}
}
class BarClass : MyNonEnumClass
{
public override bool DoYourThing()
{
throw new Exception("Bar!");
}
}
class BazClass : MyNonEnumClass
{
public override bool DoYourThing()
{
Console.Beep();
Console.WriteLine("Beep.");
return false;
}
}
Hope this helps ease your switch/case pain!
modified on Wednesday, February 11, 2009 5:21 PM
|
|
|
|
|
There's an even easier way. Take a look at my post below - it's as easy as this.
|
|
|
|
|
Thanks... I did write that way under Dictionary way already, though.
|
|
|
|
|
Wow, thanks akidan!
I think I will go with the last one.
All generalizations are wrong, including this one!
(\ /)
(O.o)
(><)
|
|
|
|
|
My pleasure! Happy I could help.
|
|
|
|
|
Why would you like to throw away the switch case?
This is a great way to code statemachines, for instance when you've got a status.
Or you use if else, but is like the same as switch case.
It really depends on what is it when you would like to get rid of the switch case. It depends on the situation. Show a situation and we'll give the solution.
|
|
|
|
|
You could always use a Dictionary with an enumeration and a Action to use. For instance, you could have an enumeration that closed a window like this:
public enum Operation
{
Close,
Save,
}
public void Action(Operation action)
{
if (_dictionary.ContainsKey(action))
{
_dictionary[action]();
}
}
public void Register(Operation operation, Action action)
{
_dictionary.Add(operation, action);
} Then, you can add your implementation like this:
Register(Operation.Close, delegate(){ this.Close(); }); As you can see, calling this method removes the need for a switch altogether.
|
|
|
|
|
Pete O'Hanlon wrote: As you can see, calling this method removes the need for a switch altogether.
Not if you have legacy code as the OP does. He still has to switch the code to the new method.
|
|
|
|
|
Augh... that's terrible.
|
|
|
|
|
Hi Pete, I like your solution, it looks short and effecient, however, there's still one big problem.. I cant understand it
See, I have this statement:
foreach (DataGridViewColumn grdC in grd.Columns)
{
switch (grdC.HeaderText)
{
case "ID":
grdC.HeaderText = "id";
break;
case "NAME":
grdC.HeaderText = "name";
break;
...
}
}<pre>
<div class="ForumSig"><hr><font face="Comic Sans MS" size="2" color="#3300aa">All generalizations are wrong, including this one!</font><font face="Arial" size="4">
(\ /)
(O.o)
(><)</font></hr></div>
|
|
|
|
|
your code is a WTF! All you're doing is lower-casing the header.
This would suffice
foreach (DataGridViewColumn grdC in grd.Columns)
{
grdC.HeaderText = grdC.HeaderText.ToLower();
}
|
|
|
|
|
|
The only place where there's a better solution, is where your switches indicate you should have a collection of classes, each representing a different case with the same overloaded method.
Christian Graus
Driven to the arms of OSX by Vista.
|
|
|
|
|
I have written a code that fills a form with data from a database into textboxes, the thing is some of the textbox comes up with empty information and they leave gaps within my document, is there any way to get rid of them?
Ferron
|
|
|
|
|
To clarify, are you filling a single textbox with more than one value from your database? Or do you have completely empty textboxes and want to format the empty spaces out of the form?
|
|
|
|
|
just one value for each text field. I have the address one under the other and there are making my page look bad. I want to format the empty spaces out
Ferron
|
|
|
|
|
I'm no expert, so there's only one solution I could think of that would work:
if (textbox1.TextLength < 1)
{
textbox2.Location.Y -= [int HeightOfTextbox];
}
I think the location 0,0 is in the upperleft corner, so this should be the right equation, but don't quote me on it. I haven't actually tested this.
modified on Wednesday, February 11, 2009 4:45 PM
|
|
|
|
|
Just for some extra info, you can do this slightly better:
Use pre tags for instance.
And do it like this:
if(String.IsNullOrEmpty(textbox1.Text))
{
textbox.Visible = false;
}
|
|
|
|
|
visible doesn't remove the space there. jst don't show
Ferron
|
|
|
|
|
He was commenting on the formatting of my post, but you should note how he set up his if-statement.
|
|
|
|