|
Yes I can do this. but i can easily miss it.
thanks
|
|
|
|
|
I'd say it's not too bad. Drop all the elses, they are not needed as each condition returns out. That will remove some of the indentation.
If value is null and nulls are allowed, then it'll throw a null exception on the ToString(). The error message for the null check is wrong.
The IsNumber() and ToInt() functions are interesting, as in they don't exist on object. Extension methods? The assumption seems to be that the number is actually a string representation of a number, in which case first confirm it is a string, then do a int.TryParse to extract it...
Regards,
Rob Philpott.
|
|
|
|
|
yup the IsNumber() and ToInt() is a custom extension, basically the IsNumber() will identify the string if it can be a number(either a decimal,int and so on), while the ToInt() as you expected will convert a value to int.
BTW thank you, for your suggestion
|
|
|
|
|
A question on QA [^] from someone who knows the internal structure of a Type, but does not have a reference to the Type or an Interface the Type implements ... and who needs to cast the Type as Object to its original Type to access its internal field.
In other words: I have an instance of this Class cast to Object:
public class ExampleClass
{
public int ExId { set; get; }
public string ExString { set; get; }
public ExampleClass(int exId, string exString)
{
ExId = exId;
ExString = exString;
}
} And, my code does not contain the definition of this Class.
So I want to cast the instance of ExampleClass as Object to its Native Type. The thought occurred to me that it might be possible, since I know the internal structure of ExampleClass to "spoof" an Interface like this:
public interface IExample
{
int ExId { set; get; }
string ExString { set; get; }
} And, use it like this on the instance to get it back to ExampleClass Type:
IExample iexample = example as IExample;
This results in the value of 'iexample being set to 'null.
I also tried "spoofing" the Class, and using that:
public class xExample
{
public int ExId { set; get; }
public string ExString { set; get; }
public xExample(int exId, string exString)
{
ExId = exId;
ExString = exString;
}
}
xExample xexample = ExampleClassAsObject as (xExample); My conclusion is that this kind of "spoofing" is not possible in .NET, and, being foolish enough to ask why, I ask: why ? Security reasons ? A "spoof" is never "the real thing" ?
Just curious, thanks.
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Try it with the dynamic keyword;
using System;
class ConsoleApplication
{
public class ExampleClass
{
public int ExId { set; get; }
public string ExString { set; get; }
public ExampleClass(int exId, string exString)
{
ExId = exId;
ExString = exString;
}
}
static void Main(string[] args)
{
object ec = new ExampleClass(1, "hello world");
dynamic ec2 = ec;
Console.WriteLine(ec2.ExString);
Console.ReadLine();
}
}
BillWoodruff wrote: Security reasons ? I think it is a technical "feature", a side-effect. Otherwise, dynamic would be a nice hole in that security.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
Thanks, Eddy, that's a use of 'dynamic I never would have thought of.
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Your welcome ofc
I'd see it more as a bit of abuse; it is not a very nice 'solution', but it does the trick. Will explode as soon as someone changes the name of the property. Not during compile time, but during runtime. A compile-time check would be preferred.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
The answer, as always, lies in the il. Specifically, you're looking at these two lines:
L_001a: ldfld class SpoofTest.ExampleClass SpoofTest.Class1::example
L_001f: isinst SpoofTest.IExample So, the code loads the instance and then tests it to see if it's an instance of your interface. Obviously, it's not an instance so the code would leave iexample as nulL, so this code
public Class1()
{
IExample iexample = example as IExample;
if (iexample == null)
{
System.Diagnostics.Debug.WriteLine("This does not compute");
}
} produces this IL
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
.maxstack 3
.locals init (
[0] class SpoofTest.IExample iexample,
[1] bool CS$4$0000)
L_0000: ldarg.0
L_0001: ldc.i4.1
L_0002: ldstr "Test"
L_0007: newobj instance void SpoofTest.ExampleClass::.ctor(int32, string)
L_000c: stfld class SpoofTest.ExampleClass SpoofTest.Class1::example
L_0011: ldarg.0
L_0012: call instance void [mscorlib]System.Object::.ctor()
L_0017: nop
L_0018: nop
L_0019: ldarg.0
L_001a: ldfld class SpoofTest.ExampleClass SpoofTest.Class1::example
L_001f: isinst SpoofTest.IExample
L_0024: stloc.0
L_0025: ldloc.0
L_0026: ldnull
L_0027: ceq
L_0029: ldc.i4.0
L_002a: ceq
L_002c: stloc.1
L_002d: ldloc.1
L_002e: brtrue.s L_003d
L_0030: nop
L_0031: ldstr "This does not compute"
L_0036: call void [System]System.Diagnostics.Debug::WriteLine(string)
L_003b: nop
L_003c: nop
L_003d: nop
L_003e: ret
}
Now, compare this to what happens if I change ExampleClass to implement IExample. The IL changes to this
.method public hidebysig specialname rtspecialname instance void .ctor() cil managed
{
.maxstack 3
.locals init (
[0] class SpoofTest.IExample iexample,
[1] bool CS$4$0000)
L_0000: ldarg.0
L_0001: ldc.i4.1
L_0002: ldstr "Test"
L_0007: newobj instance void SpoofTest.ExampleClass::.ctor(int32, string)
L_000c: stfld class SpoofTest.ExampleClass SpoofTest.Class1::example
L_0011: ldarg.0
L_0012: call instance void [mscorlib]System.Object::.ctor()
L_0017: nop
L_0018: nop
L_0019: ldarg.0
L_001a: ldfld class SpoofTest.ExampleClass SpoofTest.Class1::example
L_001f: stloc.0
L_0020: ldloc.0
L_0021: ldnull
L_0022: ceq
L_0024: ldc.i4.0
L_0025: ceq
L_0027: stloc.1
L_0028: ldloc.1
L_0029: brtrue.s L_0038
L_002b: nop
L_002c: ldstr "This does not compute"
L_0031: call void [System]System.Diagnostics.Debug::WriteLine(string)
L_0036: nop
L_0037: nop
L_0038: nop
L_0039: ret
}
You'll obviously notice, at this stage, that the isinst check is no longer there.
|
|
|
|
|
Thanks, Pete, that's a satisfyingly "deep" answer !
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
You're welcome my friend. I like going into the innards of the code, so a question like this was a golden opportunity for me.
|
|
|
|
|
Is there a way to get OAuth2 access token without prompting user for UserID an Password. I mean, from back end accept the authorization and authentication request silently without prompting Website?
|
|
|
|
|
Considering the website will probably NOT trust your users local account authority on their own workstations, no.
The entire reasons for entering a username and password is so that the user can prove to the system that they are who they way they are. The system has to have a "trusted authority" to validate those credentials against.
|
|
|
|
|
TcpClient tClient = new TcpClient("gmail-smtp-in.l.google.com", 25);
string CRLF = "\r\n";
byte[] dataBuffer;
string ResponseString;
NetworkStream netStream = tClient.GetStream();
StreamReader reader = new StreamReader(netStream);
ResponseString = reader.ReadLine();
/* Perform HELO to SMTP Server and get Response */
dataBuffer = Encoding.ASCII.GetBytes("HELO KirtanHere" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
dataBuffer = Encoding.ASCII.GetBytes("MAIL FROM:<youremail@gmail.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
/* Read Response of the RCPT TO Message to know from google if it exist or not */
dataBuffer = Encoding.ASCII.GetBytes("RCPT TO:<senderemail@domainname.com>" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
ResponseString = reader.ReadLine();
if (GetResponseCode(ResponseString) == 550)
{
MessageBox.show("Mai Address Does not Exist !
Original Error from Smtp Server :" + ResponseString);
}
/* QUITE CONNECTION */
dataBuffer = BytesFromString("QUITE" + CRLF);
netStream.Write(dataBuffer, 0, dataBuffer.Length);
tClient.Close();
// write a sub procedure for return status of email which is valid or not
private int GetResponseCode(string ResponseString)
{
return int.Parse(ResponseString.Substring(0, 3));
}
|
|
|
|
|
Not entirely sure, but I think their rationale is to prevents bots from grabbing valid emails.
Best,
John
-- LogWizard Meet the Log Viewer that makes monitoring log files a joy!
|
|
|
|
|
If you mean "I can send mail to any address, even if it doesn't actually exist" then yes, you can. Most email systems do that and discard invalid addresses to prevent spammers and phishers from knowing which ones are valid and concentrating on those.
Nothing you can do about that!
But...if you send too many, you will almost certainly end up on a blocked domain list.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
|
|
|
|
|
Hello,
I have a winform application which has a treeview and listview with n number of columns. I want to reorder the columns but the treeview data is not getting interchanged. How do i trigger the event wherein on column reorder the row data is changed.
Currently on ColumnReorder event im swapping the childnode data based on olddisplay index and newdisplay index and storing it in childnode.tag. But im unable to trigger the drawnode event to display the reordered information.
For example if i have 3 columns say Folder, DateCreated and Size and when i drag and drop "DateCreated" column after "Size" i want the data in "DateCreated" column to be moved.
Thanks
|
|
|
|
|
If your intent is to re-build the TreeView based on re-ordering the columns in the ListView, I think that's not a good design choice because of the amount of work you'd have to do to re-build the TreeView node-structure.
If you absolutely have to have different views, I would use multiple TreeViews, each one built to match a given ListView column order; then I'd just display the TreeView that matches the current ListView column order. Of course, depending on how many items you display, how many columns, etc. that could be expensive in terms of memory consumption and time-to-build the TreeViews.
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Hi,
Im supposed to have the design like that hence im using treeview and listview. How do i rebuild Treeview on reordering of columns. I have the new treeview data but im unable to trigger the event to write the new treeview data.
Thanks
|
|
|
|
|
To help you further with this, I'd need to know:
1. did you write the code that populates the ListView, and builds the TreeView Nodes based on the ListView ?
2. if you did write the code: please describe, in a general way, how you build the TreeView Nodes.
3. is the ListView being populated by being 'bound to a DataSource ?
4. Do you know how to write code that recursively parses a TreeView, accessing every Node ?
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Hi,
1) Yes im using code which populates the listview and builds treeview nodes based on it.
2) I have around 20 columns in listview and for each treeview node i store the values of all columns in node.tag and populate it.
3)I didnt understand what bound to a datasource means.
4) No i dont have idea how to recursively parse a Treeview.
Thanks
|
|
|
|
|
1) Yes im using code which populates the listview and builds treeview nodes based on it.
Okay, but I still don't have a clear idea of what is actually displayed in the TreeView: assuming there's one "root-node" for each row in the ListView, does that root-node have "child-nodes" ? If so, what are they: one child node per column ?
Please describe exactly what I'd see in one root-node before and after a re-ordering of any column.
2) I have around 20 columns in listview and for each treeview node i store the values of all columns in node.tag and populate it.
That doesn't sound quite right, but what exactly are you storing in the Tag: an instance of a Class or Struct ?
3)I didnt understand what bound to a datasource means.
Let's leave that issue alone then.
4) No i dont have idea how to recursively parse a Treeview.
That's easy to do, but only necessary when you have a multi-level TreeView where any Node can have any number of Child Nodes, and so on.
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
|
|
|
|
|
Hi,
1) For example im displaying C:\ drive details in winform and for treeview C:\ drive will be the assembly/root node. The childnodes will be all the folders present in the drive and these folders can again have multiple folders.
-----------------------------------------------------------------------------------------------------
| Name | Date Modified | Type | Size |
------------------------------------------------------------------------------------------------------
C
|_ TestData | 21/10/2015 | File Folder | |
|_ APP | 21/10/2015 | File Folder | |
|_Test1 | 16/10/2015 | Text Document | 72 KB |
|_Test2 | 18/10/2015 | Text Document | 40 KB |
|_ Temp | 11/11/2015 | File Folder | |
|_ Image1 | 01/06/2015 | JPEG image | 39 KB |
As shown above, this roughly shows my winform display for rootnodes and childnodes. So when i try to reorder/rearrange column 2 to column 3 so date modified becomes column 3 and Type becomes column 2 but the corresponding treeview data remains same name dates are still present in column 2 and filetypes in column 3. I want this data also to be rearranged. I have stored the data after rearranging in a string variable but i dont know how to rewrite this information and display it.
2) In childnode.Tag i pass the treeview row data
For example for the above scenario
childNode.Tag = name + \t + date + \t + type + \t + size;
name,date,type and size are string variables.
Thanks
|
|
|
|
|
As I understand it now:
1. you do not want to change what is displayed in the TreeView when you re-order Columns in the ListView:
1.a. you want re-ordering columns in the ListView to properly move the Column data
And, I'm puzzled because: if you are doing a column re-order the data should move with it.
So, please show your code ... the EventHandler ... that responds to the user at run-time re-ordering columns.
And, why did you choose to store the various column fields as Text in the Tag property of TreeNodes ?
«I want to stay as close to the edge as I can without going over. Out on the edge you see all kinds of things you can't see from the center» Kurt Vonnegut.
modified 14-Nov-15 3:59am.
|
|
|
|
|
Hi,
1) Yes i do not want to change the Treeview structure when columns in listview are reordered.
I want the corresponding column data to move when columns are reordered.
Im not sure how will the data be moved if column is reordered. I have listed the code which im using on reorder
private void ListView_ColumnReordered(Object sender, ColumnReorderedEventArgs e)
{
int iNewOrder, iOldOrder = 0;
iNewOrder = e.NewDisplayIndex;
iOldOrder = e.OldDisplayIndex;
string strNodeInfo;
string tempVar;
foreach (TreeNode childNode in rootNode.Nodes)
{
// im interchanging the values
tempVar = string.Copy(childAttributesOrder[iOldOrder]);
childAttributes[iOldOrder] = string.Copy(childAttributes[iNewOrder]);
childAttributesOrder[iNewOrder] = string.Copy(tempVar);
childNode.Tag = childAttributes[0] + seperatorTAB + childAttributes[1] + seperatorTAB + childAttributes[2] + seperatorTAB + childAttributes[3];
}
}
I didnt know of any other way of storing the values except in childnode.tag.
Thanks a lot for your replies.
|
|
|
|
|
Hi,
Can you help me out im still stuck in the reorder issue.
Thanks
|
|
|
|