C#で定数をフラグ(if文)によって切り替え

このQ&Aのポイント
  • C#での定数の切り替え方法について相談です。
  • C#でのグローバル変数の切り替え方法について教えてください。
  • C#での変数の宣言と定数への変換方法について教えてください。
回答を見る
  • ベストアンサー

C#で、定数をフラグ(if文)によって切り替え

C#ですが、カテゴリが無いのでC/C++のカテゴリに入れています。 基本的に変数(定数)の宣言は1回しか出来ないとわかっていますが、 以下の様な定義を何とかできないでしょうか? if (true) { public static readonly string Flag = "True"; } else { public static readonly string Flag = "False"; } これって、変数を使って、以下のようにするしか無いですよね…… public static string Flag = ""; if (true) { Flag = "True"; } else { Flag = "False"; } もしくは、変数で宣言した物を、途中で定数にする事は可能でしょうか? 目的としては、グローバルで宣言した変数を別の関数で変更されないようにしたいだけなのですが。 何か、手があれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65535
  • ベストアンサー率43% (8506/19341)
回答No.2

readonlyキーワードは実行時定数に使えるから public static readonly string Flag = (判定式) ? "True" : "False"; って書けなかったっけ?

sara_seiji
質問者

お礼

ありがとうございます。 その方法がありましたね。 それで大丈夫でした。

その他の回答 (2)

  • gentoo314
  • ベストアンサー率41% (15/36)
回答No.3

そもそも、グローバル変数をそのまま外部に公開しているのに問題があるような。 クラスの中に入れて、外部からはプロパティで制限かける方法が一般的だと思います。

sara_seiji
質問者

お礼

ありがとうございます グローバル変数は外部公開したくないので、定数を使いたいって話です。 変数の場合はクラスの中に入れてプロパティで参照しています。

  • stick503
  • ベストアンサー率0% (0/1)
回答No.1

スクリーンセーバーの作動しない件ですが、解決しました、先日 ワイヤレス マウスに取り換えたところ、この現象が起こりまして、マイクロソフト製ですが使っていたら、インストールされまして途端 解決したわけです。遅くなって申し訳ありませんでした。

sara_seiji
質問者

お礼

回答先を間違えていませんか?

関連するQ&A

  • Javaのif文がわかりません!

    public class If2 {   static boolean b1, b2;   public static void main(String[] args) {     int x = 0;     if ( !b1 ) {     if ( !b2 ) {       b1 = true;       x++;       if ( 5 > 6) {         x++;       }       if ( !b1 ) x = x + 10;       else if ( b2 = true ) x = x + 100;       else if ( b1 | b2 ) x = x + 1000;       }     }     System.out.println(x);    }  } ------------------------------------------------------------ 正常にコンパイルされ、101とでます。 if文の()内にある!b1というのが意味が分かりません^^; 2行目でb1とb2はfalseになるのは分かりましたが !b1や!b2はfalseではない!ということですか? 誰か教えてください!よろしくお願いします!!

  • if文の分岐をelseにする事ができません。

    以下のような定義の構造体があります。 この構造体のメンバであるchar型配列Cが、 【実行】にあるようにif文で使われている時にelseの処理2を実行する事ができませんでした。 char型の変数だと、'\0'が入っていればelseとなるのですが、 配列となっているCにstrcpyで'\0'や0,NULLを設定してみてもelseにはなりませんでした。 この様なif文でelseの処理2を実行するにはどうすれば良いのでしょうか? 初歩的な質問かも知れませんが、回答頂けると幸いです。 【定義】 typedef struct { struct { char C[100]; }B }A 【実行】 static A* hoge; hoge = (A*)malloc(sizeof(A)); if(A->B.C) { 処理1 }else{ 処理2 }

  • &と|の演算子を使ったif文のプログラムについて

    ↓のプログラムの実行結果について質問します。 public class Test{ public static void main(String args[]){ if(methodA() & methodB() ){ System.out.print(1); }else{ System.out.print(2); } if(methodA() | methodB() ){ System.out.print(3); }else{ System.out.print(4); } } private static boolean methodA(){ System.out.print("A"); return false; } private static boolean methodB(){ System.out.print("B"); return true; } } 上記のプログラムを実行すると AB2AB3 と出力されるのですが、 何故こういう風になるのか教えていただけませんか? また、if文の中をそれぞれ if(methodA() & methodB() ) if(methodA() | methodB() ) と書き換えると A2A3 となるのですが、これについてもイマイチよく分かりません。 メソッドからfalseとtrueを戻り値として受け取り 演算子によって処理を分けているんでしょうけど、 どういう流れで処理が行われているのか 出力結果を見ても読めなくて・・・

    • ベストアンサー
    • Java
  • VB.net 2010 文字定数ってありますか?

    今までC-Builderを使用しており、今回、会社の方針でVBでプログラムを書き始めた者です。 データーの比較を行いたいのですが、VBには文字定数と言う概念ありますか? C ですと以下の様なコーディングが可能です。 iDataが65の時flagを1に、それ以外の時にflagを2にする。 int iData;    i f( iData == 'A' ) flag = 1; else flsg = 2; 現在VBで if iDat = 65 then flag =1 else flag = 2 end if と書いていますが、もしVBに文字定数の概念があれば65ではなく'A'の値と比べて居る様にコーディングしたいのです。 もちろんコメントに書いて置けば良いのですが方法があればそれを使って見たいと思っています。 若しくはVBにはその様な概念は無いとの回答でも構いません。 色々探しましたが、分かりませんでしたので、お分かりに成る方、宜しくご回答下さい。

  • End Ifは不要な場合もある?

    Excel2010使用で下記のVBAのコードを書きました。 Sub イフとエンドイフは組ではなかったのか()  Dim Flag As Boolean  Dim S As Worksheet   For Each S In Worksheets    If S.Name = "合計" Then Flag = True '   Else '    Flag = False '   End If   Next S   If Flag = True Then    MsgBox "「合計」というシートはすでに存在します"   Else    Worksheets(1).Copy after:=Worksheets(Worksheets.Count)    ActiveSheet.Name = "合計"   End If End Sub 前半の >' Else >' Flag = False >' End If の部分があると「Elseに対応するIfがありません」というエラーが出ます。 Elseに関する記述だけをコメントアウトすると「End Ifに対応するIfブロックがありません」というエラーが出ます。 この部分をコメントアウトすればきちんと動作するのですが、If文はちゃんと存在しているにもかかわらず、またほとんど同じ記述の後半ではエラーが出ないというのに、なぜこのようなエラーが出るのかわかりません。 なにか勘違いをしているのでしょうか。

  • 3ビットのフラグを持つ2個の変数の組み合わせによる分岐の上手な書き方

    お世話になります。 C言語において、3つの状態を持っている変数で状態の組み合わせによって分岐するプログラムを作りたいと思っています。 3ビットのフラグによって2進数で001,010,100の3個のどれかの状態であるとして、以下の条件で分岐させるさせたいです。 ・2個とも同じ状態のとき ・片方が001,010で、もう一方が100 ・片方が001で、もう一方が010 自分では以下のように書いたのですが、条件式もっと簡潔に書くことはできないでしょうか?よろしくお願いいたします。 #include<stdio.h> typedef struct{ int name;//識別番号 unsigned int flag:3;//状態を表すフラグ }Status; int main(void) { Status a,b;//例として2変数のみ定義 a.name=10; a.flag=1; b.name=20; b.flag=2; if(!(a.flag^b.flag)){ printf("2個とも同じ状態のとき\n"); } else if( ( (a.flag&1 || a.flag&2) && b.flag&4 ) || ( a.flag&4 && (b.flag&1 || b.flag&2 ) ) ){ printf("片方が001か010で、もう一方が100\n"); } else if( (a.flag&1 && b.flag&2) || (a.flag&2 && b.flag&1) ){ printf("片方が001で、もう一方が010\n"); } }

  • if else文のフローチャート

    c言語です。 if else文のフローチャートを教えてほしいです。 Trueの場合は処理1、Falseの場合は処理2を実行したいです。 最初に条件と書きます。

  • ifの条件式 !について

    以下処理があります。 1.宣言、初期化 var A = new Array(); A[1] = A[2] = A[3] = false; 2.条件判断 if(!A[1] && !A[2] && !A[3]){ A[1] = $A[2] = A[3] = true; }else{ 処理 } } 質問:宣言⇒ifに処理が流れた時、条件式の内容は ・A[1]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[2]の否定⇒A1は、falseが格納されているので、否定でtrue。 ・A[3]の否定⇒A1は、falseが格納されているので、否定でtrue。 よって、 if(true && true && true){ A[1] = $A[2] = A[3] = true; } で結果、配列の1~3は、全てfalseから、trueに変更されるという考えで間違っていないでしょうか? よろしくお願いします。

  • C#の定数用クラスについて

    定数用のクラスを宣言し、定数を取得してxmlファイルからノードが読み込めません。 xmlファイル(set.xml) <?xml version="1.0" encoding="utf-8"?> <Setting> <!--メインフォーム--> <mainForm> <Width>400</Width> </mainForm> </Setting> 定数用クラス(nsConst.cs) namespace nsConst{ class setttingConst{ public readonly string FORM_NAME = "mainForm"; public readonly string TD_WIDTH = "Width"; } xml用クラス(nsxmlReWriter.cs) namespace nsxmlReWriter{ class xmlReWriter { public String read(String element1, String element2) { XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load(@"c:\\test\set.xml"); string ret = null; try { //Rootの取得 XmlElement Root = xml.DocumentElement; //子ノードの取得 XmlNodeList child = Root.GetElementsByTagName(element1); //該当ありの場合 if (child.Count > 0) { XmlElement gchild = (XmlElement)child.Item(0); if (gchild.GetElementsByTagName(element2).Count > 0) { ret = gchild.GetElementsByTagName(element2).Item(0).InnerText; } } } catch (Exception ex) { throw new Exception(ex.Message); } return ret; } } //ここから定数、xmlクラスを呼び出す。 MainLogic.cs namespace nsMainLogic{ class MainLogic{ private void init(){ public readonly string FORM_NAME1 = "mainForm"; public readonly string TD_WIDTH1 = "Width"; setttingConst con = new setttingConst(); xmlReWriter xmlRw = new xmlReWriter(); string width1 = xmlRw.read(con.FORM_NAME,con.TD_WIDTH); //(1) string width2 = xmlRw.read(FORM_NAME1,TD_WIDTH1); //(2) : 省略 : } } } (1)ではxmlファイルを読み込んだ結果がnullなってしまい値が取れません。 (2)では値がとれます。 わかりましたらよろしくお願いします。

  • 定数宣言

    定数を宣言時に、 public static final String SQL_QUERY = "select * from table" のように、宣言しているのを書籍やweb上で見ることがよくあります。 上記宣言のstatic修飾子について、なぜ使用するのでしょうか?

    • ベストアンサー
    • Java