◆結論
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
◆結論(にかいめ)
俺がマスクをするのは唇が割れるからです。
コメントを残す