質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1884閲覧

C#のエラーCS0841の解決

ISK

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/01/08 09:14

前提・実現したいこと

UnityでSSIDやBSSIDを取得するプログラムを作成したい。
見つけたコードを試しに実行しようとしたらエラーが発生して実行できなかった。
エラーを無くすためにどうしたらよいのか解決方法を教えてください。

発生している問題・エラーメッセージ

CS0841: Cannot use local variable 'Assembly' before it is declared

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Diagnostics; 4using System.IO; 5using System.Linq; 6using System.Reflection; 7using System.Text; 8using System.Text.RegularExpressions; 9using System.Threading.Tasks; 10using System.Collections; 11using UnityEngine; 12using UnityEngine.UI; 13 14namespace ConsoleApp2 15{ 16 class AccessPoint 17 { 18 public string SSID { get; set; } 19 public string BSSID { get; set; } 20 public byte Signal { get; set; } 21 } 22 23 class Program 24 { 25 private static async Task Main(string[] args) 26 { 27 var apList = await GetSignalOfNetworks(); 28 29 foreach (var ap in apList) 30 { 31 WriteLine($"{ap.BSSID} - {ap.Signal} - {ap.SSID}"); 32 } 33 34 Console.ReadKey(); 35 } 36 37 private static async Task<AccessPoint[]> GetSignalOfNetworks() 38 { 39 string result = await ExecuteProcessAsync(@"C:\Windows\System32\netsh.exe", "wlan show networks mode=bssid"); 40 41 return Regex.Split(result, @"[^B]SSID \d+").Skip(1).SelectMany(network => GetAccessPointFromNetwork(network)).ToArray(); 42 } 43 44 private static AccessPoint[] GetAccessPointFromNetwork(string network) 45 { 46 string withoutLineBreaks = Regex.Replace(network, @"[\r\n]+", " ").Trim(); 47 string ssid = Regex.Replace(withoutLineBreaks, @"^:\s+(\S+).*$", "$1").Trim(); 48 49 return Regex.Split(withoutLineBreaks, @"\s{4}BSSID \d+").Skip(1).Select(ap => GetAccessPoint(ssid, ap)).ToArray(); 50 } 51 52 private static AccessPoint GetAccessPoint(string ssid, string ap) 53 { 54 string withoutLineBreaks = Regex.Replace(ap, @"[\r\n]+", " ").Trim(); 55 string bssid = Regex.Replace(withoutLineBreaks, @"^:\s+([a-f0-9]{2}(:[a-f0-9]{2}){5}).*$", "$1").Trim(); 56 byte signal = byte.Parse(Regex.Replace(withoutLineBreaks, @"^.*(Signal|Sinal)\s+:\s+(\d+)%.*$", "$2").Trim()); 57 58 return new AccessPoint 59 { 60 SSID = ssid, 61 BSSID = bssid, 62 Signal = signal, 63 }; 64 } 65 66 private static async Task<string> ExecuteProcessAsync(string cmd, string args = null) 67 { 68 var process = new Process() 69 { 70 StartInfo = new ProcessStartInfo 71 { 72 FileName = cmd, 73 Arguments = args, 74 RedirectStandardInput = false, 75 RedirectStandardOutput = true, 76 RedirectStandardError = true, 77 UseShellExecute = false, 78 CreateNoWindow = true, 79 StandardOutputEncoding = Encoding.UTF8, 80 } 81 }; 82 83 process.Start(); 84 85 string result = await process.StandardOutput.ReadToEndAsync(); 86 87 process.WaitForExit(); 88 89#if DEBUG 90 if (result.Trim().Contains("The Wireless AutoConfig Service (wlansvc) is not running.")) 91 { 92 return await GetFakeData(); 93 } 94#endif 95 96 return result; 97 } 98 99 private static async Task<string> GetFakeData() 100 { 101 var Assembly = Assembly.GetExecutingAssembly(); //ここでエラーが発生しているようです 102 var resourceName = "ConsoleApp2.FakeData.txt"; 103 104 using (Stream stream = Assembly.GetManifestResourceStream(resourceName)) 105 using (StreamReader reader = new StreamReader(stream)) 106 { 107 return await reader.ReadToEndAsync(); 108 } 109 } 110 111 private static void WriteLine(string str) 112 { 113 Console.WriteLine(str); 114 } 115 } 116} 117

試したこと

「宣言される前にローカル変数 'Assembly'を使用することはできません」
というエラーの内容だったため、まだ宣言がされていないと思い「var Assembly = Assembly.GetExecutingAssembly();」の前に「var Assembly;」と宣言したがうまくいかなかった。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Zuishin

2022/01/08 09:16

> var Assembly = Assembly.GetExecutingAssembly(); //ここでエラーが発生しているようです 変数の Assembly と型名の Assembly が競合しています。 変数名は小文字から始めると良いでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問