◆結論
nameofはコンパイル時に評価されるでよ。かたやToStringとか文字列リテラルはdynamicだでよ。
◆経緯
こういうEnumがあったとして。
public enum Animal
{
Duck,
Cock,
Dick
}
public enum Action
{
Kick,
Hack,
Lick,
Suck,
Pick,
Pack,
Fuck
}
こういったコードを書くと
[Authorize(Policy = $"{Animal.Dick}:{Action.Kick}")]
以下のように怒られる。
CS0182 属性引数は、定数式、typeof 式、または属性パラメーター型の配列の作成式でなければなりません。
※英語
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
ぎゃびび!(激怒)
◆意味
書いてあるままだけど、定数じゃないといかん。つまり、コンパイル時に決定されていないといけない。
「「「されてるぢゃん!!!!」」」
つって、C#の文字列リテラルって、内部的にはToStringしてるだけなんすね。だから怒られる。
◆解決
nameofを使おうよ。nameofはコンパイル時に評価してくれるよ。typeofもそうだよ。
こうなるよ。
[Authorize(Policy = nameof(Animal.Dick) + ":" + nameof(Action.Kick))]
なーん。きったねぇコード。ぶっコ抜w
◆結論(にかいめ)
俺がマスクをするのは唇が割れるからです。
コメントを残す