5

UDK への C# dll バインドに取り組んでいます。ここでは、bool 値に対して符号なし 32 ビット整数を返す必要があります。したがって、0 は false であり、それより大きい値は true です。UDK は値を取得し、それを true または false に変換します...

私はいくつかのコードを実行していて、これを見つけました:

[DllExport("CheckCaps", CallingConvention = CallingConvention.StdCall)]
    public static UInt32 CheckCaps()
    {
        return ( Console.CapsLock ? 1 : 0);
    }

次のエラーが表示されました:

「エラー、タイプ 'int' を 'uint' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)」

エラーは理解していますが、実行する前にこの問題はありませんでした

            if (File.Exists(filepath))
            return 1;
        else
            return 0;

文字列型キャストに関するC#の問題のように見える方法から、これがある場合:

int example = 5;
Console.Writeline( example);
Console.Writeline( example + "");

最初の console.writeline は、C# が文字列への自動型キャストを行わないため、エラーになります。

これらのエラーの背後には論理的な理由があることは理解していますが (これらの状況で発生するため)、Convert.ToUInt32(1) と Convert.ToUInt32(0) を実行する以外にこれを修正する方法はありますか?

(フロートの場合は 0.f にできますが、符号なし整数の場合は同様の修正を望んでいます)

4

2 に答える 2

9

以下のコード

if (File.Exists(filepath))
    return 1;
else
    return 0;

C#標準に従っているため、コンパイルされます

13.1.7型の定数式 (§14.16) は、型、、、、、またはintに変換できます。ただし、定数式の値が変換先の型の範囲内にある場合に限ります。sbytebyteshortushortuintulong

条件式に定義されているような暗黙的な変換はないため、最初のコード スニペットには明示的なキャストまたはU接尾辞が必要です。

return Console.CapsLock ? 1U : 0;

uint上記の規則 13.1.7 に基づいてゼロを変換できるため、必要な変換/接尾辞は 1 つだけであることに注意してください。

于 2013-08-10T02:00:22.953 に答える
8

1uは 1 の符号なしリテラル構文です。 0uは 0 です。

于 2013-08-10T01:53:02.897 に答える