65712


Windows10 1909  
Visual Studio Community 2019 16.5.4 にて  
.NET Core 3.1 C# コンソールアプリケーション プロジェクトを作成、  
Program.csに以下のコードを書きました。

[code]

    using System;
    
    namespace ConsoleApp1
    {
        class Program
        {
            static void Main(string[] args)
            {
                MyStruct[] a = new MyStruct[10];
                /*
                 * aへの何らかの処理
                 */
                Array.Sort(a, (x, y) => x.$$ );
            }
        }
    
        struct MyStruct
        {
            public int I;
        }
    }
    
[/code]

現在は13行目の`Array.Sort(a, (x, y) => x.`を入力し、$$の位置にカーソルがある状態です。

起こってほしいこと

  * 入力候補としてMyStructのメンバが表示。

実際に起きたこと

  * MyStructのメンバが入力候補に表示されず、別のクラス(恐らくArray)のメンバが入力候補として表示される。

[![画像の説明をここに入力](https://i.stack.imgur.com/HwAM7.png)](https://i.stack.imgur.com/HwAM7.png)

Visual Studio 2019でMyStructのメンバを表示させるにはどのようにすればいいですか?

Intellisenseを使わずに`Array.Sort(a, (x, y) =>
x.I.CompareTo(y.I));`と入力してもコンパイルエラーは出ませんでした。

試したこと

表示された

  * Visual Studio Community 2017 15.9.22を使用
  * ReSharper 2020.1 EAP8をインストール

表示されない

  * .NET Framework 4.7.2を使う
  * 新規プロジェクトを作成
  * Visual StudioをVisual Studio Installerからアンインストール->再インストール


CC BY-SA 4.0
2020-04-17T07:17:49.543
65707
2020-04-17T11:18:11.150
39671
question
c# visual-studio
C# ラムダ式の引数の型が違う


kunif氏のコメント

> これと類似かもしれませんね。[C# Linq Join がVisual Studio 2017,
> 2019で動きが違うか。](https://ja.stackoverflow.com/q/62458/26370)
> 同様に「フィードバックの送信」とかしてみたらどうでしょう？

を頂きDeveloper Communityで検索したところ、類似した問題を見つけ、voteしました。  
[Intellisense not precisely in LINQ method Syntax
"Join"](https://developercommunity.visualstudio.com/content/problem/638094/intellisense-
not-precisely-in-linq-method-syntax-j.html)  
[Intellisense not working properly witch 'join' of
linq](https://developercommunity.visualstudio.com/content/problem/734638/intellisense-
not-working-properly-witch-join-of-li.html)

Under Consideration になっているのでバージョンが上がれば解決すると思われます。

現状では Visual Studio 2017等別のIDEを使うことで解決します。

kunifさんありがとうございます。


CC BY-SA 4.0
2020-04-17T09:16:50.917
65712
2020-04-17T09:16:50.917
39671
65707
answer


＞Visual Studio 2019でMyStructのメンバを表示させるにはどのようにすればいいですか?  
に回答

[code]

    Array.Sort(a, (x, y) => x.I.CompareTo(y.I));
    
[/code]

ではなく

[code]

    Array.Sort<MyStruct>(a, (x, y) => x.I.CompareTo(y.I));
    
[/code]

と 型を明示すると インテリセンスが効くようですね。

`Array.Sort` の部分は ジェネリックメソッドになっていて  
`Array.Sort<T>(T[] array, Comparison<T> comparison)` なので `T` の型が `MyStruct`  
だよと明示的に教えてあげるといいみたいです。

[code]

    a = a.OrderBy(r => r.I).ToArray();
    
[/code]

なんて書く事もできます。  
struct の場合は 無駄なコピーが多そうですが・・。


CC BY-SA 4.0
2020-04-17T11:18:11.150
65720
2020-04-17T11:18:11.150
18851
65707
answer