DOBON.NETプログラミング道掲示板

■35448 / 6階層)  jumbo icon(256x256)が存在するか知る方法
□投稿者/ inunoshi 一般人(6回)-(2023/06/06(Tue) 20:49:58)
  • アイコン本来の質問以外のところで文法の手ほどきまでしていただきありがとうございます。

    > それは LINQ の問題では無いですね。
    > エラー行とエラー列を再度確認してみてください。
    >
    > .FirstOrDefault(〜) が失敗しているのではなく、
    > その後に続く ?.Icon の部分を解釈できていないのだと思います。
    >
    >
    > ?.Icon 構文は「null 条件演算子」といって C#6 で追加された文法です。
    > csc.exe のオプションに /langversion:6 を追加してみてください。
    > https://ufcpp.net/study/csharp/ap_ver6.html#null-conditional
    > 現状は恐らく、
    >  C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe
    >  C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe
    > を使っているのだと思いますが、これらは /langversion:5 までしか理解しませんので、
    > Roslyn 世代の csc.exe を利用してください。

    はい。
    csc.exeを以下のように使ってコンパイルしました。
    C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /nologo /t:exe icon256.cs /r:iconlib.dll
    諸事情により、Windows標準のコンパイラを使いたいのでC#5の仕様までで行きたいと思っています。
    ただ、自分ではC#6以上の文法で出たコンパイルエラーを理解するのはスキル不足でした。

    Roslynは初めて知ったので、検索等して自分で勉強してみます。
    手元の環境はVSCode+.NET7.0で開発。最終コンパイルはWin11標準のcsc.exe使用です。

    > なお、
    >  var icon = singleIcon.FirstOrDefault(x => x.Size == size)?.Icon;
    > という行を
    >  var iconImage = singleIcon.FirstOrDefault(x => x.Size == size);
    >  if (iconImage == null) { continue; }
    >  var icon = iconImage.Icon;
    >  if (icon == null) { continue; }
    > に書き換えれば、文法レベルを C#3 相当まで下げることができます。

    C#3相当に書き直していただいたコードまで作ってくださりありがとうございます。
    いただいた内容そのままですが、以下のコードで、Win11標準のcsc.exeでもコンパイルできました。

    ありがとうございました。
    本来の質問以外のところでも大変勉強になりました。

    --------------------------------------------------------------------------
    using System;
    using System.Linq;

    public class Icon256
    {
      public static void Main()
      {
        string iconFilePath = @"C:\Windows\notepad.exe";

        var size = new System.Drawing.Size(256, 256);
        var multiIcon = new System.Drawing.IconLib.MultiIcon();
        multiIcon.Load(iconFilePath);
        foreach (var singleIcon in multiIcon)
        {
          //var icon = singleIcon.FirstOrDefault(x => x.Size == size)?.Icon;
          var iconImage = singleIcon.FirstOrDefault(x => x.Size == size);
          if (iconImage == null) { continue; }
          var icon = iconImage.Icon;
          if (icon == null) { continue; }
     
          if (icon != null)
          {
            string outName = string.Format(@"D:\{0}_256_{1}.ico",
              System.IO.Path.GetFileNameWithoutExtension(iconFilePath),
              singleIcon.Name
            );
            using (icon)
            using (var sm = new System.IO.FileInfo(outName).Create())
            {
              icon.Save(sm);
            }
          }
        }
      }
    }

解決み!
違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←Re[5]: jumbo icon(256x256)が存在するか知る方法 /魔界の仮面弁士 返信無し
 
上記関連ツリー

Nomalアイコン jumbo icon(256x256)が存在するか知る方法 / inunoshi (23/06/04(Sun) 20:10) #35433 testIcon256.png/1KB
Nomalアイコン Re[1]: jumbo icon(256x256)が存在するか知る方法 / 魔界の仮面弁士 (23/06/05(Mon) 09:49) #35435
  └Nomalアイコン Re[2]: jumbo icon(256x256)が存在するか知る方法 / inunoshi (23/06/05(Mon) 22:31) #35443 解決み!
    └Nomalアイコン Re[3]: jumbo icon(256x256)が存在するか知る方法 / 魔界の仮面弁士 (23/06/05(Mon) 22:56) #35445 解決み!
      └Nomalアイコン Re[4]: jumbo icon(256x256)が存在するか知る方法 / inunoshi (23/06/05(Mon) 23:41) #35446 解決み!
        └Nomalアイコン Re[5]: jumbo icon(256x256)が存在するか知る方法 / 魔界の仮面弁士 (23/06/06(Tue) 09:42) #35447 解決み!
          └Nomalアイコン jumbo icon(256x256)が存在するか知る方法 / inunoshi (23/06/06(Tue) 20:49) #35448 解決み! ←Now

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -