鑑於字典喜歡收集有以下類:創建使用常量字符串字段可能的字符串值重複
class A
{
[CustomAttribute(1)]
public const string X = "x";
[CustomAttribute(2)]
public const string Y = "y";
[CustomAttribute(3)]
public const string Z = "z";
}
class B
{
[CustomAttribute(4)]
public const string P = "p";
[CustomAttribute(5)]
public const string Q = "q";
[CustomAttribute(6)]
public const string Z = "z";
}
注意Z
常數,它有不同的CustomAttribute
參數的重複。
我想,使用反射,迭代的類和生產類字典收集與以下屬性:
dict.CustomGet(A.Z) == 3
dict.CustomGet(B.Z) == 6
現在,我知道,我可以很容易做到:
dict.CustomGet(()=>A.Z)
實現爲:
public int CustomGet(Expression<Func<string>> expr){...}
,並使用Expression對象來找出我正在訪問哪個課程和字段,並且有內部集合,如Dictionary<Type,Dictionary<string,int>>
或甚至可能是Dictionary<FieldInfo,int>
,但它要求我每次寫出可疑的()=>Class.ConstantName
。
請注意,我無法將字符串文字值更改爲唯一。
以上就是我目前的問題,我覺得我的問題是:我可以用另一種方式表達比告訴C#中的唯一對象傳遞給CustomGet
代替非唯一字符串?
附註:我想比較通過的字符串的引用,但由於實習,我認爲很有可能"z"
將ReferenceEqual
另一個"z"
。
最後一點:這主要是爲了好玩,我可以(並且很可能會)完全避免這個問題,但我想知道C#的限制是供將來參考:)