I'm learning c# and there is something I do not understand that I've been unable to find any help about online.
string[] = testarray = { "test1", "test2", "test3" };
teststring = teststring.Join(" ", testarray);
This fails with the following error message:
Member 'string.Join(string, params string[])' cannot be accessed with an instance reference; qualify it with a type name instead.
It does however work if I change to:
teststring = string.Join(" ", testarray);
If I however use the function Split as in:
teststring = teststring.Split(new char[] {' '});
I am no longer getting an error. I assume this has something to do with certain functions of the string class being static and some not, but how can I tell which function is static and which is not? (if this is the reason)
These enforced calling techniques between static / non-static sure is something to get used to.
You can look at MSDN's documentation for the String
class for a list of all available methods. Static methods have an orange "S" icon next to them, while instance methods do not, e.g.:
When thinking about the difference between static and instance methods, think about whether the functionality of that method depends on a particular instance of the class.
If the answer is yes, then it's likely to be implemented as an instance method; and if not, it's likely to be a static method.
For example, the Split
method separates a specific instance of the String
class (the string from which it is called) into an array.
In contrast, the Join
method is like a utility method, which can be called upon to combine an array separated by a string -- without first creating an instance of the String
class in order to call it.
You are correct on the reason; String.Join
is static but String.Split
is not.
I am no longer getting an error. I assume this has something to do with certain functions of the string class being static and some not, but how can I tell which function is static and which is not? (if this is the reason)
You could look at the MSDN docs.
For example, on the page for String.Join
, there is an S
next to the purple box for each method; this indicates that the method is declared as static
. Additionally, if you click on a particular overload you'll see the method declared as static
. For example,
public static string Join(
string separator,
IEnumerable<string> values
)
However, for String.Split
, there is no S
next to the purple box for each method. For none of the particular overloads is the method declared as static
. For example
public string[] Split(
params char[] separator
)
This is because Join is a static method on string. static methods are always called using the class name, not the name of a variable for an instance of that class.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With