string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
これは機能しません。splitメソッドがstring []を返すためです。
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',');
これは機能しません。splitメソッドがstring []を返すためです。
回答:
これを行う1つの方法を次に示します。
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
List<int> TagIds = new List<int>(tags.Split(',').Select(int.Parse));
new List<>
ますか?
ToList()
代わりに呼び出すことができます。結果は基本的に同じです。List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
ただし、の戻り値はSelect()
であるので、どちらかを行う必要IEnumerable<>
がありますList<>
Select
、この場合の拡張機能が返されIEnumerable<Int32>
、リストにないため、はい。ただし、リストには、別のコレクションをソースとして受け入れるコンストラクターがあります。
Split(new char[] {','}, StringSplitOptions.RemoveEmptyEntries)
(例外をスローするのではなく)いくつかの単純な検証を含めて無効な値をスキップする場合は、TryParseを使用するものを次に示します。
string csv = "1,2,3,4,a,5";
int mos = 0;
var intList = csv.Split(',')
.Select(m => { int.TryParse(m, out mos); return mos; })
.Where(m => m != 0)
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5
編集: Antoineによるフィードバックに基づいて更新されたクエリを次に示します。最初にTryParseを呼び出して不正な値を除外し、次にParseを呼び出して実際の変換を行います。
string csv = "1,2,3,4,a,5,0,3,r,5";
int mos = 0;
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out mos))
.Select(m => int.Parse(m))
.ToList();
//returns a list with integers: 1, 2, 3, 4, 5, 0, 3, 5
編集2: Charles Burnsからのフィードバックのおかげで、C#7.0の更新されたクエリ。この方法で余分なmos変数を取り除くので、少しクリーンになります。
string csv = "1,2,3,4,a,5,0,3,r,5";
var intList = csv.Split(',')
.Where(m => int.TryParse(m, out _))
.Select(m => int.Parse(m))
.ToList();
int.TryParse(m, out int _)
LINQ w / int.Parse()
を使用してstring[]
をに変換し、IEnumerable<int>
その結果をList<T>
コンストラクターに渡すことができます。
var tagIds = new List<int>(tags.Split(',').Select(s => int.Parse(s)));
少しLINQは長い道のりを進んでいます:
List<int> TagIds = tags.Split(',')
.Select(t => int.Parse(t))
.ToList();
LINQクエリがなくても、この方法を選択できます。
string tags = "9,3,12,43,2";
List<string> numbers = nos.Split(',').ToList<string>();
次に、このリストを整数型に変換できます...
.ToList<string>()
まだ必要using System.Linq;
string tags = "9,3,12,43,2"
List<int> TagIds = tags.Split(',').Select(x => x.Trim()).Select(x=> Int32.Parse(x)).ToList();
.Select(x => x.Trim()
、Parseはスペース文字を自動的に切り捨てる ため、を追加する必要はありません。
string tags = "9,3,12,43,2";
List<int> TagIds = tags.Split(',').Select(int.Parse).ToList();
khalid13の回答を変更しました。ユーザーが「0」の文字列を入力した場合、彼の答えは結果のリストからそれを削除します。私は似たようなことをしましたが、匿名オブジェクトを使用しました。
var result = commaSeparatedString.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => new { didConvert = int.TryParse(s.TrimNullProtection(), out convertedInt), convertedValue = convertedInt })
.Where(w => w.didConvert)
.Select(s => s.convertedValue)
.ToList();
TrimNullProtectionは、文字列がnullかどうかを保護するために私が作成したカスタム関数です。
上記のことは、エラーなしで変換できなかった文字列をすべて取り除くことです。変換に問題があった場合にエラーが必要な場合は、受け入れられた答えがうまくいくはずです。