2012-03-01 15 views
0

我很難試圖弄清楚這是否可能,當我真的不知道什麼叫。c#有編譯器常量的計算機值

我有一個APIKey(可以改變不同的構建),我們有另一個領域,轉換該APIKey更友好。這是Web友好的,我希望編譯器計算。

目前我們正在重新計算每次調用webapi的值。我可以很容易地定義一個常量,並將其放在網友的版本中,但我想變得更有愛心,並且提供更少的維護。

我想要的是這樣的。

public class WebSearch{ 
    private const string ApiKey="jsdfjsd90234092j3_%sss"; 
    private const string WebFriendlyKey=#Compiler(ApiKey.Replace("-","+")); 
} 

其中WebFriendlyKey由編譯器計算。

+0

我不知道你的意思。 「更友好」是什麼意思?這在哪裏計算?它應該如何使用? – Oded 2012-03-01 15:43:55

+6

「我們正在重新計算每次調用webapi的價值」,您確定這是一個值得花費時間的問題嗎? – 2012-03-01 15:47:01

+0

HenkHolterman與我在一起的時間有什麼關係? Oded由於在我們的過程中必須發生的其他事情,某些字符不能被允許。因此,我只是選擇「MoreWebFriendly」這些詞來總結那些對我的問題不重要的部分。 我只想知道我是否可以讓編譯器爲我計算常量的值,而不是自己對值進行硬編碼。 – XenoPuTtSs 2012-03-01 15:50:01

回答

2

我不相信當前的C#編譯器可以做到這一點。也許隨着新的模塊化編譯器問世(Roslyn)。

你現在可以做的就是每次你的程序開始時只計算一次WebFriendlyKey,並且在整個過程的一生中保存它,我保證你從性能角度看和常數一樣好:

public class WebSearch{ 
    private const string ApiKey="jsdfjsd90234092j3_%sss"; 

    // This guy will only run once per AppDomain 
    private static readonly string WebFriendlyKey = ApiKey.Replace("-","+"); 
} 
8

C#4規範的第7.19節列出了編譯器將代表您執行常量的每個操作。字符串替換不是其中之一。

但是,您可以使用只讀靜態字段,或具有靜態屬性的只讀靜態字段,該靜態屬性在尚未計算的情況下計算該值,並在該值存在時提取該值。在這種情況下,編譯器不會執行編譯,但計算只能在每個appdomain中執行一次。

這就是說,我同意亨克。你有更大的魚在這裏炒。擔心會影響正確性或性能的事情。