|
|
yes, thats perfect for youtube!
but im more looking for a general way of capturing incoming streams.
will read up on this one though as well, thanks
na
|
|
|
|
|
Hi friends
I am a beginer in C# programing . Below code snippet cause Invalid argument error while running, please help me to solve
public struct somestruct
{
public int n1;
public int n2;
}
public void findsomething( ref object obj )
{
....
}
public void form_load()
{
somestruct s1 = new somestruct();
findsomething( ref s1 )
}
error occurs in findsomething( ref s1) line
thanks in advance
-RisKhan-
|
|
|
|
|
Hello you have to change your method prototype :
to :public void findsomething( ref somestruct obj )
why are you using struct?
|
|
|
|
|
RisKhan wrote: ref object obj
RisKhan wrote: somestruct s1 = new somestruct(); findsomething( ref s1 )
You need to cast to object before supplying to method. Else replace the object type with somestruct .
|
|
|
|
|
RisKhan wrote: I am a beginer in C# programing .
Then my first advice is to not use structures, use classes. Structures are a lot more complidated to implement correctly, so you need a bit more experience before you should try that.
Also, don't use the ref keyword unless there really is a benefit. In your example you should return the result from the method instead.
RisKhan wrote: Below code snippet cause Invalid argument error while running
No, it doesn't. You can't run the code as it doesn't compile.
RisKhan wrote: error occurs in findsomething( ref s1) line
That's because the variable is not the same type as the parameter, and object does not inherit from somestruct .
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: and object does not inherit from somestruct.
I think you mean somestruct does not inherit from object .
“Time and space can be a bitch.”
–Gushie, Quantum Leap
{o,o}.oO( Looking for a great RSS reader? Try FeedBeast! )
|)””’) Built with home-grown CodeProject components!
-”-”-
|
|
|
|
|
logan1337 wrote: I think you mean somestruct does not inherit from object.
No I don't.
somestruct does inherit from object, but object does not inherit from somestruct.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
Guffa wrote: but object does not inherit from somestruct
Well of course it doesn't. Object doesn't inherit from anything.
Besides, if somestruct does inherit from object (which it may well, I'm not sure on that point as I never use structs), then why is this a problem passing it into a parameter of a method that expects an object?
“Time and space can be a bitch.”
–Gushie, Quantum Leap
{o,o}.oO( Looking for a great RSS reader? Try FeedBeast! )
|)””’) Built with home-grown CodeProject components!
-”-”-
|
|
|
|
|
logan1337 wrote: if somestruct does inherit from object (which it may well, I'm not sure on that point as I never use structs), then why is this a problem passing it into a parameter of a method that expects an object?
It's not. The problem is that the type doesn't match.
I thought that perhaps the type could be cast one way, but that is not possible either. The type has to match exactly.
Despite everything, the person most likely to be fooling you next is yourself.
|
|
|
|
|
I see. Nevermind my comment then.
“Time and space can be a bitch.”
–Gushie, Quantum Leap
{o,o}.oO( Looking for a great RSS reader? Try FeedBeast! )
|)””’) Built with home-grown CodeProject components!
-”-”-
|
|
|
|
|
Hello everyone,
I read from some documents that string/array are immutable, means when we change the content of a string (e.g. append text) or change the content of an array (e.g. append new element), then a new instance be created and the old instance will be discarded?
thanks in advance,
George
|
|
|
|
|
Strings are immutable which means when you append a string, a new instance will be created. Note that literal strings are interned and will use same string reference.
George_George wrote: change the content of an array (e.g. append new element),
What do you meant by "append new element" ? Array is a block of data with a length. You can assign values to array locations.
|
|
|
|
|
Thanks N a v a n e e t h,
I am using both powershell and C#, in powershell we can append something to an array, and in C#, we can not correct?
regards,
George
|
|
|
|
|
Arrays are not resizable. So if you have space available in current array, you can assign data to that location. Else you need to copy the whole array contents to a new array with more storage location. Array class has methods to make this easier.
|
|
|
|
|
|
Precisely.
[edit]
I re-read your post. An Array is a fixed, contiguous series of identical data-types that have been reserved in memory and can be directly accessed through an address offset (eg. X[0] or X[6]). Arrays are static in size, you cannot append to them, you can most certainly change their contents.
A String is an array of characters, therefore, the same applies.
OTOH, dynamic data structures such as lists, queues and stacks can change in size and have items appended and removed.
|
|
|
|
|
Thanks Mustafa,
Mustafa Ismail Mustafa wrote: A String is an array of characters, therefore, the same applies.
Not quite agree with above statement. I think for array, we can not change its content (e.g. when change some specific char inside a string, a new instance will be created), correct?
regards,
George
|
|
|
|
|
George_George wrote: I think for array, we can not change its content
We can change it's content.
int[] a = new int[]{10,20,30};
a[1] = 40;
George_George wrote: when change some specific char inside a string, a new instance will be created
You can't do the same with strings as you did for arrays.
string str = "hello";
str[0] = 'a';
|
|
|
|
|
Cool, N a v a n e e t h!
regards,
George
|
|
|
|
|
Mustafa Ismail Mustafa wrote: A String is an array of characters, therefore, the same applies.
I doubt this. Array is a block of data with some length and provides indexer to access the data. This is correct for strings. But AFAIK, strings are stored as inline not as character array. Correct me if I am wrong.
Mustafa Ismail Mustafa wrote: lists, queues and stacks can change in size
MS just wrapped the array copying logic inside these classes. When additional space required, a new array will be created and existing contents will be copied to there.
|
|
|
|
|
Thanks N a v a n e e t h!
1.
What is the differences between "stored as inline" type of data structure and "character array" type of data structure?
2.
N a v a n e e t h wrote: MS just wrapped the array copying logic inside these classes.
Queue, stack and list are implemented as array internally -- means continuous linear storage?
regards,
George
|
|
|
|
|
1 - String data is stored directly in the string object. Just examine the heap, you can understand this.
2 - Yes. Queue, Stack uses arrays internally.
|
|
|
|
|
Thanks N a v a n e e t h,
1.
Good to learn List/Stack/Queue are using continious linear storage other than using C style pointed based linked list.
2.
What means "directly in the string object"? You mean not storing a pointer or reference (by some level of indirection)?
3.
N a v a n e e t h wrote: examine the heap
You mean watch the managed heap address? The same address for the string variable and the string content?
regards,
George
|
|
|
|
|
N a v a n e e t h wrote: I doubt this. Array is a block of data with some length and provides indexer to access the data. This is correct for strings. But AFAIK, strings are stored as inline not as character array. Correct me if I am wrong.
A string is a sequential collection of Unicode characters that is used to represent text. A String object is a sequential collection of System.Char objects that represent a string. The value of the String object is the content of the sequential collection, and that value is immutable.
A String object is called immutable (read-only) because its value cannot be modified once it has been created. Methods that appear to modify a String object actually return a new String object that contains the modification. If it is necessary to modify the actual contents of a string-like object, use the System.Text.StringBuilder class. (source: http://msdn.microsoft.com/en-us/library/system.string.aspx[^])
An Array by definition is a sequential collection of the same data type accessed through an indexer (offset). So it seems like it. Also, It appears that (specifically with strings) even if you try to alter the contents, a new string is actually returned.
N a v a n e e t h wrote: MS just wrapped the array copying logic inside these classes. When additional space required, a new array will be created and existing contents will be copied to there.
I can't find any sources for or against this argument, but from what I know and remember, all these collection objects are based on the original ArrayList which inherits directly from the System.Object, whilst all the other ValueTypes inherit from System.ValueType, so I'd guess they're different. Also, aren't arrays pushed onto the stack whilst the other dynamic datastructures get pushed onto the heap? I'm not too sure, so don't consider my arguments as final. Indeed, this is becoming something I'm interested in finding out.
|
|
|
|