16

これはどういう意味ですか@(廃止された.NET Framework 1.1 ConfigurationSettings.AppSettingsを使用していることはわかっています)?

@ConfigurationSettings.AppSettings["some_setting"];

これは文字列リテラルではありません:文字列変数でリテラル'@'を使用する

実際のコード:

_scale_id_regex = @ConfigurationSettings.AppSettings["ScaleIdRegEx"];

_scale_id_regexWindowsサービスの一部であり、クラス内の単なるプライベート文字列である通常の.csファイルでは、ASP.NETとRazorは関係しません。

4

4 に答える 4

27

これは逐語的な識別子と呼ばれます。予約語にちなんで変数に名前を付けることができます。例えば

string @string = string.Empty;
object @object = new object();
int @int = 1;
...

あなたが持っているコードは有効ですが、私はそこでサービスを提供するとは思いません@。これはページを更新するよりも早く賛成したので、ECMA C#言語仕様のセクション9.4.2に次のように記載されています。

接頭辞「@」を使用すると、キーワードを識別子として使用できます。これは、他のプログラミング言語とのインターフェースに役立ちます。文字@は実際には識別子の一部ではないため、他の言語では、接頭辞なしの通常の識別子として識別子が表示される場合があります。@プレフィックスが付いた識別子は、逐語的識別子と呼ばれます。

投稿したコードは有効です。これは、推奨されていませんが、言語仕様で許可されているためです。

[注:キーワードではない識別子に@プレフィックスを使用することは許可されていますが、スタイルの問題として強くお勧めしません。エンドノート]

于 2012-08-07T18:03:58.430 に答える
4

@予約語などと区別するために、識別子の前に を付けることができます。

var @class = 1;

(たとえば、@class は、主にカミソリ ビューで css クラスを指定するために使用されます。それ以外の場合は、そのような名前の使用は避けてください :)

LINQのようなものでも役立ちますfrom @group in...

于 2012-08-07T18:04:36.547 に答える
2

前駆体:

.cs質問が通常のクラスにあると言ったので、これに反対票を投じないでください。私がこれを書いた時点では、これがかみそりのビューに含まれていなかったことを示す質問には何もありませんでした。そして、文脈がなければ、それが事実である方がはるかに理にかなっています.

他のユーザーがここで何ができるかを探している場合に備えて、この回答をここに保持し@ます。

答え:

Razor ビュー ( .cshtml) からサーバー側の変数とメソッドにアクセスする方法です。これは非常に一般的に次の目的で使用されます。

  1. セッション変数の読み取り:

    @Session["something"]

  2. Html ヘルパー メソッドにアクセスする

    @Html.RenderPartial("someview","somecontroller");

  3. 質問にあることを正確に実行します(個人的には悪い習慣だと思いますが)

    @ConfigurationManager.AppSettings["whatever"];

  4. コードブロックを開始し、次のようなものを使用しますforeach

    @{
        foreach(var item in Model)
        {
            <span class="modelProperty">@Model.SomeTextProperty</span>
        }
    }
    
于 2012-08-07T18:06:04.247 に答える
0

ここでの「@」記号は、実際には C# の演算子ではありません。これは、ASP.NET Razor 構文コード ブロックの開始を示します。(しかし、もちろん、コード ブロック内には C# があります。)

于 2012-08-07T18:06:56.977 に答える