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

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

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

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Q&A

解決済

2回答

1121閲覧

型変換

KTMEI

総合スコア44

C#

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

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

0グッド

0クリップ

投稿2017/03/01 05:50

以下のようなソースの場合、testLongTmpの型はint型になると
思っていたのですが、long型になってしまいます。

C#

1ulong testLong = 123456; 2var testLongTmp = (Int32)testLong

int型にしたい場合はどのような実装にすればいいのでしょうか。

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

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

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

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

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

ozwk

2017/03/01 06:00

int型になるんですが、どうやって確認しましたか?
AmisakiGou

2017/03/02 09:05

ブレークポイントで確認してみてください。Int32と明示的なキャストしてるのであればintになりますし、もしキャストが出来ないならエラーが発生します。
guest

回答2

0

こんにちは。
そのコードだとint型になっているはずですが……
何を以ってlong型になっていると判断したのでしょうか?
何か意図しない動作をしているとしたら、質問の外のコード部分に問題があると思います。

投稿2017/03/01 06:01

tamoto

総合スコア4105

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

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

0

自己解決

値を入れるところに「123456」と記載していましたが、
元をたどると他の関数から渡ってきた値であり、値が大きいものになっていました。

値自体が大きかったため、longの型になっているようです。

デバッグできちんと確認できておらずすみません・・・。

投稿2017/03/03 01:53

KTMEI

総合スコア44

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

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

ozwk

2017/03/03 02:43

var testLongTmp = (Int32)testLong; においてtestLongの出自がどうであろうとtestLongTmpはint型になると思うんですが。
KTMEI

2017/03/03 03:09

コメントを受けて再考してみましたが、やはりlongに なっているように見えます・・。 正確に書くと以下のようなコードです。 public int aiueo(ulong testLong) { var testLongTmp = (IntPtr.Size == 4 ? ( (Int32)testLong ) : ( (Int64)testLong ) ); } 32bit環境か64bit環境かを判断していて、デバッグ実行し ステップでおっていくと、IntPtr.Sizeの値が4であることを 確認しています。 また、testLongTmpですが、この変数をウォッチリストに入れ、 関数終わりのスコープ(})の箇所までステップ実行し、 ウォッチリスト内の型情報でlongとなっていることを確認しました。 確認方法に問題があるのでしょうか。
ozwk

2017/03/03 03:29 編集

varって「型を決めない」って意味じゃないですよ。 あくまで「右辺からコンパイル時に決定できるので省略する」って意味です。 (A ? (Int32)B : (Int64)C) これはAによって型が変わるなんてことは起こりません どっちの結果になろうとも型は同じでないとならないので 大きい方のInt64に合わせます。
ozwk

2017/03/03 03:20

コーディング中に試しにvarの上にマウスカーソル持っていってみてください 型が表示されるはずです。
KTMEI

2017/03/03 03:28

varの上にマウスカーソルを持っていって確認できました! varの理解が乏しかったです・・・。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問