Why do I get "cannot be accessed with an instance reference" when using teststring.Join but not teststring.Split? (c#)

c#

Solution

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
)

Problem

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.

Original source