const字符串字段vs"typed"字符串

Nef*_*ion 4 c# string parameters const function-calls

我有一个像这样的小功能:

void Bar(string s)
{
*/ do somthing with the string here.*/
}

void Foo()
{
    Bar("Hello");
}
Run Code Online (Sandbox Code Playgroud)

如果我看一下IL输出,它给了我以下内容:

.method private hidebysig instance void Foo() cil managed
{
    .maxstack 8
    L_0000: ldarg.0 
    L_0001: ldstr "Hello"
    L_0006: call instance void TestApp.MainWindow::Bar(string)
    L_000b: ret 
}
Run Code Online (Sandbox Code Playgroud)

现在我以为我会替换它的const string字段.

const string str= "Hello";
void Foo()
{
    Bar(str);
}
Run Code Online (Sandbox Code Playgroud)

转换为完全相同的 IL片段.

现在我的问题是使用哪一个?

Foo("Hello"); 要么 Foo(cHello);

谢谢您的帮助!

--------------编辑-------------------
更具体地说,我将此用于记录目的以添加前缀消息:它只会在代码中出现一次!

所以它看起来更像是这样的:

void LogDebug(string msg)
{
    Log("[DEBUG]", msg)
}
void Log(string pre, string msg)
{
    // generates an output in form of
    // pre + msg
}
Run Code Online (Sandbox Code Playgroud)

:)

Jon*_*Jon 5

答案应该是显而易见的:因为IL是相同的,所以根据纯粹的源代码考虑使用最好的方法.

一般来说,这意味着要使用const string,以便在方法中不显示魔术值Foo.如果只使用常数这可能听起来不太令人信服,但如果将来甚至有可能不止一次使用它,那么DRY几乎是一个猎枪论点.

更新:

在这种特定情况下(调试输出,常量保证只使用一次)我不认为常量提供任何值.我会对字符串文字进行硬编码.