2011-10-07 22 views
9

に私はVS2008で.NET 3.5のプロジェクトを持っていると私はstring.Join()this overloadstringIEnumerable<T>を取る1)を使用しようとしていると、コンパイラが知っていないようですこの過負荷。string.Join().NET 3.5

これは私がFoo()は私がFoo().ToArray()を使用している場合、それは動作しますが、私は、私はもちろん

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

を取得

IEnumerable<string> Foo() 
    { 

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

ある

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

をしようとしたコードですIEnumerable<T>を必要とする過負荷がうまくいかない理由が不思議です。クラシック表示で

MSDNは、それがVS2008非古典的な見解で/ .NET 3.5

enter image description here

(私はメッセージを見つけることができませんでした「このページでは、固有のものです....」との互換性だと言います。私は、私はスクリーンキャップを設置しようと思いました)

+2

のEr、[ 'String.Join(文字列、IEnumerableを)'](http://msdn.microsoft.com/en-us/library/dd783876%28v=VS.100%29.aspx) v4まで追加されていませんでした(そしてその後は4.5になりました) - ** EDIT **ここでは[String Methods in 3.5](http://msdn.microsoft.com/en-us/library/0h8wc12c) %28v = VS.90%29.aspx) –

+0

軽量ビューには、[このページは固有のものです....]がありません。代わりに、ページ上部のコンボを使用して表示するバージョンを選択します。 – mydogisbox

+0

'クリックして評価し、フィードバックを与える ' –

答えて

7

下部のバージョン情報は、別の何かを言う:

Version information on MSDN

このバージョン情報は、選択したビューに関係なく、記事の下部に表示されます(ちょっと違うかもしれません)。あなたが発見した右上にある

ノートでは、そのようなのように、あなたはURLで見つけることができ、選択したリソースのバージョンを参照している:

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

(太字で強調表示)。通常、これはフレームワークのバージョンも選択します(これらはVSと並行してリリースされるため)が、明らかにここでの分類に間違いがあるようです。

私は間違いとして報告しています。

+0

ありがとうございます。この「クラシック表示」エラーを報告するにはどうすればよいですか? –

+0

ページの右上隅には、»クリックして評価とフィードバックを与える«があります。私はこの問題にチームを維持することに警告するためにそれを使用します。軽量バージョンでは、ページの下部に「Feedback」リンクがあります。 – Joey

3

あなたがサポートされるプラットフォームのセクションを見てみる場合は、その見つけることができますに沿って、ケースを使用してToArray(として4

)サポート対象:

NET Frameworkの をFoo()コール:

Foo().ToArray() 
12

string.Joinオーバーロード受付IEnumerable<T>は.NET 4まで追加されませんでした.Net 3.5では使用できません。 MSDNドキュメントの古典的なビューは単に間違っています。

.NET 3。5 Joinメソッドに渡すためにIEnumerable<string>ToArray()を呼び出す必要があります。

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

参考のため、these are the overloadsが.NET 3.5でサポートされています。

1

あなたが探しているMDSNページは、.Net 4以降のみです。これは、あなたがチェックすべきページである:それは、具体的の.NET Framework 3.5が表示されていることを

http://msdn.microsoft.com/en-us/library/0h8wc12c(v=VS.90).aspx

お知らせし、それはあなたの過負荷が含まれていないこと。

0

古典的なビューは確かにそれにlinkを提供しますが、CMSの間違ったエントリである必要があります。前述のリンクをクリックすると、コンテキストが失われていることがわかります(左側のメニューは現在の場所がわからず、System.String.Joinにあるはずです)。また、バージョンドロップダウンでもそれを認識しません。

normal versionが動作し、.NET 4および.NET 4.5のみを示しています。

でサポートされている.NET Frameworkのサポート対象:4

の.NET Frameworkクライアントプロファイル:4

0

は、.NET 2.0または3.5に固執する場合、それは、価値がある何のために、とString.Join()の2番目の引数に ".ToArray()"を記述しないでください。ここでは、.Net 4.0で実装されているString.Join()を模倣する単純な実装があります。

public static class MString 
    { 
     /// <summary> 
     /// This method simply duplicates the String.Join() method that was introduced in .Net 4.0. So 
     /// it can be used in C# projects targeting .Net 3.5 or earlier. 
     /// </summary> 
     /// <typeparam name="T">type of the object collection (typically string)</typeparam> 
     /// <param name="separatorString">separator to be placed between the strings</param> 
     /// <param name="valueObjects">collection of objects that can be converted to strings</param> 
     /// <returns>string containing all of the objects converted to string with separator string in between</returns> 
     public static string Join<T>(string separatorString, IEnumerable<T> valueObjects) 
     { 
     if (separatorString == null) 
      separatorString = ""; 

     bool firstValue = true; 
     StringBuilder stringBuilder = new StringBuilder(); 
     foreach (T oneObject in valueObjects) 
     { 
      if (!firstValue) 
       stringBuilder.Append(separatorString); 
      firstValue = false; 

      stringBuilder.Append(oneObject == null ? "" : oneObject.ToString()); 
     } 

     return stringBuilder.ToString(); 
     } 
    }