2017-06-25 6 views
3

私はushortリストの最大値を取っておきたいのですが、そのリストが空のときにはデフォルト値に "1"を設定します。例えばC#Linh DefaultIfEmptyをushortリスト項目で使用することはできませんか?

:私の例のVisual Studioでは

List<ushort> takeMaxmumId = new List<ushort>(); 
var max = takeMaxmumId.Select(x=>x).DefaultIfEmpty(1).Max(); 

私は、このエラーを表示:

'IEnumerable' does not contain a definition for 'DefaultIfEmpty' and the best extension method overload 'Queryable.DefaultIfEmpty(IQueryable, int)' requires a receiver of type 'IQueryable'

私のリストタイプは、私は何の問題を持っていないint型だった場合は、この問題はUSHORT型ではどのようなものです?そして、私はこれを最良の方法でどうやって解決できますか?

+1

var max = takeMaxmumId.Select(x => x).DefaultIfEmpty((ushort) 1).Max(); 
キャスト1。 –

+0

私はその作品をうまくキャストするときに良い答えです。 –

+1

またはさらに短く 'var max = takeMaxmumId.DefaultIfEmpty((ushort)1).Max();' – Deadzone

答えて

3

SelectIEnumerable<ushort>を生成し、DefaultIfEmptyintを生成します。したがって、タイプは一致しません。あなたはまた、intに配列要素を変換することができ

var max = takeMaxmumId.Select(x=>x).DefaultIfEmpty<ushort>(1).Max(); 
//     ^^^^^^^^^^^^^ 
//   This part can be removed 

Demo.

:あなたはこの1つを試みることができる

var max = takeMaxmumId.Select(x => (int)x).DefaultIfEmpty(1).Max(); 
+1

あなたは '選択'を必要としません。 – Deadzone

+0

ありがとう私の場合、私はushortプロパティを持つクラスを持っているので、私の場合はselectを使う必要がありますが、この例では "Select"は必要ありません –

+1

テストする場所はありませんが、そのように型を指定しますか? 'list.DefaultIfEmpty ().Max()?' – Svish

0

あなたは、デフォルトでushortタイプを強制することでこの問題を解決することができます。

は、 intとして解釈され、あなたがこれを適用したいリストはタイプ List<ushort>であるため

問題は、ushortにキャストせずに1を渡すと、あなたが拡張メソッドDefaultIfEmptyを適用することはできませんという事実によるものです。 dasblinkenlightは、すでに述べたという事実にもかかわらず、注意点として

'List' does not contain a definition for 'DefaultIfEmpty' and the best extension method overload 'Queryable.DefaultIfEmpty(IQueryable, int)' requires a receiver of type 'IQueryable'

:あなたは、次の

var max = takeMaximumId.DefaultIfEmpty(1).Select(x => x).Max(); 

を書く場合は、上記の

文を説明し、以下のエラーメッセージが表示され、になるだろうこれは彼のポストでは、あなたはそこに投影をしないので、あなたはすべてSelectを必要としません。あなたはあなたのリストに含まれる数字の最大値を取得したいだけです。

0

あなたのデータ型はushortなので、DefaultIfEmpty拡張メソッドの代わりにorverloadを設定する必要があります。すなわちDefaultIfEmpty(このIEnumerableソース、TSourceのdefaultValue)。

だから、ushortと入力するにはソースにキャストする必要があります。 ushort.varマックス= takeMaxmumId.Select(X => X).DefaultIfEmpty((USHORT)1).MAX()へ

関連する問題