2016-08-10 7 views
-5

myValueプロパティを入力するために、単一の文字列からList<myItem>を作成します。linq selectから1つの自動数値プロパティを作成する方法

文字列:

"233 984 5 66 304 219 277 790" 

クラス:

public class myItem 
{ 
    public long ID;  // autonumeric id go here 
    public long myValue; // string values go here 
    public string otherProperties; //I will fill later from other source 
} 

私は、文字列を読んでスペースを使用して分割し、long[]に解析することができます。

string line1 = "233 984 5 66 304 219 277 790"; 
string[] words = line1.Split(' '); 
long[] myValues = Array.ConvertAll(words, s => long.Parse(s)); 

しかし、いけませんどのようにあなたが行うことができますList<myItem>

+1

私はあなたが何を求めているのか分かりません。ここにあるデータは、ターゲット構造とリモートで一致しません。 –

+0

私もあなたが望むものを手に入れません。あなたがどこかでデータを送信したいのであれば、非常に簡単なJSONのようなものを使って行う必要があります。 –

+0

@DavidLご覧のとおり、私は整数の配列を持っています。私は 'myValues'から' long'で 'List 'を、また、autonumericプロパティでは 'ID'を一つ必要とします。 –

答えて

5
var list = 
    line1.Split(' '). 
    Select((word, ix) => new myItem() { 
     ID = ix, 
     myValue = long.Parse(word) 
    }). 
    ToList(); 
+0

変数 '(word、ix)'に任意の名前を選ぶことができますが、 'word'は分割結果で、' ix'はインデックスですか? –

+0

最初の引数は常に値、2番目は常にインデックスです。[docs link](https://msdn.microsoft.com)を参照してください。 /home/library/bb534869%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396)@Habibが彼の答えにリンクしています – Blorgbeard

+0

私はあなたの質問が*それは悪いですが、upvotesのために懇願しないでください。 – Blorgbeard

4

を作成する知っている:単語の間に複数のスペースがある場合は、それを無視することができるように

  • StringSplitOptions.RemoveEmptyEntriesであなたの文字列を分割します。あなたのクラスにインデックスに
  • プロジェクト出力をサポートしています
  • 使用IEnumerable<T>.Selectoverload

コード:

List<myItem> list = line1.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries) 
    .Select((r, i) => new { Index = i, Value = r }) 
    .Select(t => new myItem 
    { 
     ID = t.Index, 
     myValue = long.Parse(t.Value), 
    }).ToList(); 

私はまた、上記の単一Selectとによって行われていることができることを追加する必要がありますインデックスのオーバーロードで、IndexフィールドとValueフィールドの匿名タイプを選択する代わりに、インデックスと値を012に投影することができますクラス。

+0

@スターンでは、誰かがそれをしたでしょう。、単にインデックスの過負荷を使用する意図を明示したかったのです。 – Habib

+0

ありがとう、ハビブ、幸運にも私の質問を理解しています。 btw私の質問はとても悪いですか?してください、あなたも1つの選択版を追加できますか? –

+0

@JuanCarlosOropeza私はHabibが指している* select *バージョンが私の答えのコードと同じだと信じています。 – Blorgbeard

関連する問題