Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

string.Join() in .net 3.5

Tags:

c#

I have a .net 3.5 project in vs2008 and I'm trying to use this overload of string.Join() (the one that takes a string and IEnumerable<T>) and the compiler does not seem to know about this overload.

This is the code that I tried

    var result = string.Join(" ", Foo());

where Foo() is

    IEnumerable<string> Foo()
    {

        foreach(string s in new []{"1", "2", "3"} )
        {
            yield return s;
        }
    }

I get

> Error 2   Argument '2': cannot convert from
> 'System.Collections.Generic.IEnumerable<string>' to 'string[]'

Of course, if I use Foo().ToArray() it works but I'm wondering why the overload that takes IEnumerable<T> won't work.

MSDN in classic view says it's compatible with vs2008/.net 3.5

enter image description here

(I couldn't find the message "This page is specific to...." in non-classic views so I thought I'd put up a screen-cap.)

like image 932
Professor Chaos Avatar asked Oct 07 '11 13:10

Professor Chaos


People also ask

What is string Join in vb net?

The Join function takes an array of strings and joins them using a delimiter string, to return a single string. The Split function takes a string and separates it at the delimiter, to return an array of strings.

How do you join strings?

The join() method takes all items in an iterable and joins them into one string. A string must be specified as the separator.

How to concatenate array of string in c#?

The Join() method in C# is used to concatenate all the elements of a string array, using the specified separator between each element.


3 Answers

The string.Join overload accepting IEnumerable<T> was not added until .NET 4. It is not available in .Net 3.5. The classic view in MSDN documentation is simply incorrect.

In .NET 3.5, you will need to invoke ToArray() on the IEnumerable<string> in order to pass it into the Join method.

string.Join(" ", Foo().ToArray()); 

For reference, these are the overloads supported by .NET 3.5.

like image 83
Anthony Pegram Avatar answered Sep 23 '22 22:09

Anthony Pegram


The version information at the bottom says something different:

Version information on MSDN

Note that you can find that version information at the bottom of the article, regardless of the selected view (it might just look a little different).

The note in the upper-right you have found is referring to the selected resource version you can find in the URL, such as in:

http://msdn.microsoft.com/en-us/library/dd783876(VS.90).aspx

(highlighted in bold). Usually this selects the framework version as well (since those are released in tandem with VS), but apparently there seems to be a mistake in the classification here.

I'd just report it as a mistake.

like image 38
Joey Avatar answered Sep 22 '22 22:09

Joey


If you take a look at the Supported Platforms section you can find out that:

NET Framework Supported in: 4

So as a case use ToArray() along with Foo() call:

Foo().ToArray()
like image 28
sll Avatar answered Sep 26 '22 22:09

sll